public void ExcelStreamToClientTest()
        {
            WfCreateClientDynamicProcessParams createParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();  
            WfCreateClientDynamicProcessParams outProcessParams = null;

            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(createParams);
            WfClientProcessDescriptor client = builder.Build(createParams.Key, createParams.Name);
 
            string processKey = createParams.Key;

            using (Stream stream = WfClientProcessDescriptorConverter.Instance.ClientDynamicProcessToExcelStream(client))
            {
                WfCreateClientDynamicProcessParamsConverter.Instance.ExcelStreamToClient(processKey, stream, ref outProcessParams);
            }
            createParams.ActivityMatrix.PropertyDefinitions.ForEach(action => 
              {
                  action.DataType = ColumnDataType.String;              
              }); //EXCEL 无法存储类型信息,所有默认都为string类型
            createParams.AreSame(outProcessParams);
        }
        public void ClientDynamicProcessToExcelStreamTest()
        {
            WfCreateClientDynamicProcessParams createParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();
            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(createParams);
            WfClientProcessDescriptor client = builder.Build(createParams.Key, createParams.Name);

            string processKey = createParams.Key;
            System.Data.DataTable processTable = new System.Data.DataTable();
            System.Data.DataTable matrixTable = new System.Data.DataTable();

            using (Stream stream = WfClientProcessDescriptorConverter.Instance.ClientDynamicProcessToExcelStream(client))
            {
                processTable = DocumentHelper.GetRangeValuesAsTable(stream, "Process", "A3");
                matrixTable = DocumentHelper.GetRangeValuesAsTable(stream, "Matrix", "A3");
            }
            Assert.IsTrue(processTable.Rows.Count > 0);
            Assert.IsTrue(matrixTable.Rows.Count == 2);
            Assert.IsTrue(matrixTable.Rows[0]["CostCenter"].ToString() == "1001");
            Assert.IsTrue(matrixTable.Rows[1]["Age"].ToString() == "40");
        }
        public void WfClientDynamicProcessBuilderInstanceTest()
        {
            WfCreateClientDynamicProcessParams createParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();

            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(createParams);

            WfClientProcessDescriptor client = builder.Build(createParams.Key, createParams.Name);

            IWfProcess process = ProcessHelper.CreateProcessInstance(client);

            Assert.IsTrue(process.Activities.Count > client.Activities.Count);
        }
        public void WfClientDynamicProcessBuilderTest()
        {
            WfCreateClientDynamicProcessParams createParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();

            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(createParams);

            WfClientProcessDescriptor client = builder.Build(createParams.Key, createParams.Name);

            WfProcessDescriptor server = null;

            WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref server);

            Assert.IsTrue(server.Variables.GetValue("ClientDynamicProcess", false));
            Assert.IsNotNull(server.Activities["N1"]);
            Assert.IsTrue(server.Activities["N1"].Resources.Count > 0);
            Assert.IsTrue(server.Activities["N1"].Resources[0] is WfActivityMatrixResourceDescriptor);
        }
        public void WfDynamicProcessToExcelTest()
        {
            string processKey = "c8d2a844-0003-bb51-4ab0-1563a40d2b58";
            WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();
            processParams.Key = processKey;
            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams);
            WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name);

            WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1";// GetCurrentTenantCode();

            WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client);

            System.Data.DataTable processTable = null;
            System.Data.DataTable matrixTable = null;

            using (Stream stream = WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey))
            {
                processTable = DocumentHelper.GetRangeValuesAsTable(stream, "Process", "A3");
                matrixTable = DocumentHelper.GetRangeValuesAsTable(stream, "Matrix", "A3");
            }
            Assert.IsTrue(processTable.Rows.Count > 0);
            Assert.IsTrue(matrixTable.Rows.Count == 2);
            Assert.IsTrue(matrixTable.Rows[0]["CostCenter"].ToString() == "1001");
            Assert.IsTrue(matrixTable.Rows[1]["Age"].ToString() == "40");
        }
        public void ExcelKeyChangeSaveDescriptorTest()
        {
            const string processKey = "c8d2a844-0002-bb51-4ab0-1563a40d2b587";

            WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();
            processParams.Key = processKey;

            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams);
            WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name);

            WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1";// GetCurrentTenantCode();

            WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client);//数据准备

            #region 保存EXCEL后,修改EXCEL数据后再校验
            //using (FileStream fs = File.OpenWrite(string.Format("E:\\work\\TMP\\{0}.xlsx", processKey)))
            //{
            //    WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey).CopyTo(fs);
            //} 

            //using (FileStream fs = File.OpenRead(string.Format("E:\\work\\TMP\\{0}.xlsx", processKey)))
            //{
            //    WfClientProcessDescriptorServiceProxy.Instance.ExcelToSaveDescriptor(processKey, fs);
            //}
            #endregion

            client = WfClientProcessDescriptorServiceProxy.Instance.GetDescriptor(processKey);

            Assert.AreEqual(client.Properties.GetValue("Key", string.Empty), processKey);
            Assert.AreEqual(client.Key, processKey);
        }
        public void ExcelToSaveDescriptorTest()
        {
            const string processKey = "c8d2a844-3a3a-bb51-4ab0-1563a40d2b58";
            WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();
            processParams.Key = processKey;

            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams);
            WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name);
            WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client);//数据准备

            WfClientProcessDescriptor server = null;

            using (Stream stream = WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey)) //EXCEL文件流
            {
                WfClientProcessDescriptorServiceProxy.Instance.DeleteDescriptor(processKey);//清理
                //校验清理结果
                try
                {
                    server = WfClientProcessDescriptorServiceProxy.Instance.GetDescriptor(processKey);
                }
                catch (MCS.Library.WcfExtensions.WfClientChannelException ex)
                {
                    Assert.IsTrue(true, ex.Message);
                }
                WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1";// GetCurrentTenantCode();


                WfClientProcessDescriptorServiceProxy.Instance.ExcelToSaveDescriptor(processKey, stream);
                server = WfClientProcessDescriptorServiceProxy.Instance.GetDescriptor(processKey);
                Assert.AreEqual(processParams.ProgramName, server.ProgramName);
                // Assert.AreEqual("Test1", server.Properties));
            }
        }
        public void ExcelToWfCreateClientDynamicProcessParamsTest()
        {
            const string processKey = "c8d2a844-0000-bb51-4ab0-1563a40d2b58";
            WfCreateClientDynamicProcessParams processParams = ProcessDescriptorHelper.CreateClientDynamicProcessParams();
            processParams.Key = processKey;

            WfCreateClientDynamicProcessParams result = null;
            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams);
            WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name);
            WfClientServiceBrokerContext.Current.Context[Consts.TenantCode] = "Test1";// GetCurrentTenantCode();

            WfClientProcessDescriptorServiceProxy.Instance.SaveDescriptor(client);//数据准备

            using (Stream stream = WfClientProcessDescriptorServiceProxy.Instance.WfDynamicProcessToExcel(processKey)) //EXCEL文件流
            {
                result = WfClientProcessDescriptorServiceProxy.Instance.ExcelToWfCreateClientDynamicProcessParams(processKey, stream);
            }

            processParams.ActivityMatrix.PropertyDefinitions.ForEach(action =>
            {
                action.DataType = ColumnDataType.String;
            }); //EXCEL 无法存储类型信息,所有默认都为string类型

            processParams.AreSame(result);
        }
        public void ExcelToSaveDescriptor(string processKey, Stream stream)
        {
            OperationContext.Current.FillContextToOguServiceContext();

            WfCreateClientDynamicProcessParams processParams = ExcelToWfCreateClientDynamicProcessParams(processKey, stream);

            WfClientDynamicProcessBuilder builder = new WfClientDynamicProcessBuilder(processParams);
            WfClientProcessDescriptor client = builder.Build(processParams.Key, processParams.Name);

            WfProcessDescriptor processDesp = null;
            WfClientProcessDescriptorConverter.Instance.ClientToServer(client, ref processDesp);

            WfProcessDescriptorManager.SaveDescriptor(processDesp);
        }