예제 #1
0
        public override void ServerToClient(WfResourceDescriptor server, ref WfClientResourceDescriptor client)
        {
            server.NullCheck("server");

            if (client == null)
            {
                client = new WfClientActivityMatrixResourceDescriptor();
            }

            WfClientActivityMatrixResourceDescriptor cmr = (WfClientActivityMatrixResourceDescriptor)client;
            WfActivityMatrixResourceDescriptor       amr = (WfActivityMatrixResourceDescriptor)server;

            cmr.ExternalMatrixID = amr.ExternalMatrixID;

            foreach (SOARolePropertyDefinition spd in amr.PropertyDefinitions)
            {
                WfClientRolePropertyDefinition cpd = null;

                WfClientRolePropertyDefinitionConverter.Instance.ServerToClient(spd, ref cpd);

                cmr.PropertyDefinitions.Add(cpd);
            }

            foreach (SOARolePropertyRow sRow in amr.Rows)
            {
                WfClientRolePropertyRow cRow = null;

                WfClientRolePropertyRowConverter.Instance.ServerToClient(sRow, cmr.PropertyDefinitions, ref cRow);

                cmr.Rows.Add(cRow);
            }
        }
예제 #2
0
        public void FilterAndMergeNotMatchedActivityMatrixAndApprovalMatrixTest()
        {
            SOARolePropertiesQueryParam queryParam = new SOARolePropertiesQueryParam();

            queryParam.QueryName  = "CostCenter";
            queryParam.QueryValue = "1001";

            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareActivityMatrixResourceDescriptor();

            resource.Rows.ForEach(row => row.Values.FindByColumnName(SOARolePropertyDefinition.ActivityCodeColumn).Value = "NotMatched");

            SOARolePropertyRowCollection activityRows = resource.Rows.Query(queryParam);

            int originalActivityCount = activityRows.Count;

            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareApprovalMatrix();

            SOARolePropertyRowCollection approvalRows = approvalMatrix.Rows.Query(queryParam);

            int originalApprovalCount = approvalMatrix.PropertyDefinitions.Count - 1;

            activityRows.MergeApprovalMatrix(resource.PropertyDefinitions, approvalRows, approvalMatrix.PropertyDefinitions);

            activityRows.AssertAndOutputMatrixOperators();

            Assert.AreEqual(originalActivityCount + originalApprovalCount, activityRows.Count);
        }
예제 #3
0
        public void ActivityMatrixWithNotifierTest()
        {
            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareActivityMatrixResourceDescriptor();

            IWfProcessDescriptor processDesp = ProcessHelper.GetDynamicProcessDesp(resource);

            IWfProcess process = ProcessHelper.StartupProcess(processDesp, new Dictionary <string, object>()
            {
                { "CostCenter", "1001" },
                { "PayMethod", "1" },
                { "Age", 30 }
            });

            Console.WriteLine(process.Activities.Count);

            WfOutputHelper.OutputMainStream(process);
            WfOutputHelper.OutputEveryActivities(process);

            Assert.AreEqual(5, process.Activities.Count);

            Assert.IsTrue(process.Descriptor.Activities["ND10"].EnterEventReceivers.Count > 0);
            Assert.IsTrue(process.Descriptor.Activities["ND20"].EnterEventReceivers.Count > 0);

            Assert.IsTrue(process.Descriptor.Activities["ND10"].LeaveEventReceivers.Count > 0);
            Assert.IsTrue(process.Descriptor.Activities["ND20"].LeaveEventReceivers.Count > 0);
        }
예제 #4
0
        public override void ClientToServer(WfClientResourceDescriptor client, ref WfResourceDescriptor server)
        {
            client.NullCheck("client");

            if (server == null)
            {
                server = new WfActivityMatrixResourceDescriptor();
            }

            WfActivityMatrixResourceDescriptor       amr = (WfActivityMatrixResourceDescriptor)server;
            WfClientActivityMatrixResourceDescriptor cmr = (WfClientActivityMatrixResourceDescriptor)client;

            amr.ExternalMatrixID = cmr.ExternalMatrixID;

            foreach (WfClientRolePropertyDefinition cpd in cmr.PropertyDefinitions)
            {
                SOARolePropertyDefinition spd = null;

                WfClientRolePropertyDefinitionConverter.Instance.ClientToServer(cpd, ref spd);

                amr.PropertyDefinitions.Add(spd);
            }

            foreach (WfClientRolePropertyRow cRow in cmr.Rows)
            {
                SOARolePropertyRow sRow = null;

                WfClientRolePropertyRowConverter.Instance.ClientToServer(cRow, amr.PropertyDefinitions, ref sRow);

                amr.Rows.Add(sRow);
            }
        }
예제 #5
0
        public static WfActivityMatrixResourceDescriptor PrepareReservedActivityMatrixResourceDescriptor()
        {
            WfActivityMatrixResourceDescriptor resource = new WfActivityMatrixResourceDescriptor();

            resource.PropertyDefinitions.CopyFrom(PrepareReservedPropertiesDefinition());
            resource.Rows.CopyFrom(PrepareReservedRows(resource.PropertyDefinitions));

            return(resource);
        }
        private static WfActivityMatrixResourceDescriptor PrepareSampleActivityMatrixResourceDescriptor()
        {
            WfActivityMatrixResourceDescriptor resource = new WfActivityMatrixResourceDescriptor();

            resource.PropertyDefinitions.CopyFrom(PrepareSamplePropertiesDefinition());
            resource.Rows.CopyFrom(PrepareSampleRows(resource.PropertyDefinitions));

            return(resource);
        }
예제 #7
0
        public void SimpleServerActivityMatrixResourceDescriptorToClient()
        {
            WfActivityMatrixResourceDescriptor server = ProcessDescriptorHelper.GetServerActivityMatrixResourceDescriptor();

            WfClientResourceDescriptor client = null;

            WfClientActivityMatrixResourceDescriptorConverter.Instance.ServerToClient(server, ref client);

            ((WfClientActivityMatrixResourceDescriptor)client).AreSame(server);
        }
예제 #8
0
        public static WfActivityMatrixResourceDescriptor GetServerActivityMatrixResourceDescriptor()
        {
            WfActivityMatrixResourceDescriptor resource = new WfActivityMatrixResourceDescriptor();

            resource.ExternalMatrixID = UuidHelper.NewUuidString();

            resource.PropertyDefinitions.CopyFrom(PrepareServerPropertiesDefinition());
            resource.Rows.CopyFrom(PrepareServerRows(resource.PropertyDefinitions));

            return(resource);
        }
예제 #9
0
        public void MergeMatchedOneActivityMatrixAndApprovalMatrixTest()
        {
            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareOneRowActivityMatrixResourceDescriptor();

            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareOneRowApprovalMatrixResourceDescriptor();

            resource.MergeApprovalMatrix(approvalMatrix);

            Assert.AreEqual(approvalMatrix.PropertyDefinitions.Count - 1, resource.Rows.Count);

            resource.AssertAndOutputMatrixOperators();
        }
예제 #10
0
        /// <summary>
        /// 准备一个一行的内部包含动态资源的矩阵
        /// </summary>
        /// <returns></returns>
        public static WfActivityMatrixResourceDescriptor PrepareDynamicActivityMatrixResourceDescriptor()
        {
            WfActivityMatrixResourceDescriptor resource = new WfActivityMatrixResourceDescriptor();

            resource.PropertyDefinitions.CopyFrom(PreparePropertiesDefinition());

            resource.Rows.Add(PrepareOneDynamicRow(resource.PropertyDefinitions));
            resource.Rows.Add(PrepareTwoUsersDynamicRow(resource.PropertyDefinitions));
            resource.Rows.Add(PrepareInvalidUserDynamicRow(resource.PropertyDefinitions));

            return(resource);
        }
예제 #11
0
        public static WfActivityMatrixResourceDescriptor PrepareEmptyActivityMatrixResourceDescriptorWithExternal()
        {
            WfActivityMatrixResourceDescriptor resource = PrepareActivityMatrixResourceDescriptor();

            WfApprovalMatrix externalMatrix = ApprovalMatrixHelper.PrepareApprovalMatrix();

            WfApprovalMatrixAdapter.Instance.Update(externalMatrix);

            resource.ExternalMatrixID = externalMatrix.ID;

            return(resource);
        }
예제 #12
0
        public void ActiveMatrixResourceSerializationTest()
        {
            WfActivityMatrixResourceDescriptor expected = ActivityMatrixHelper.PrepareDynamicActivityMatrixResourceDescriptor();

            string serializedData = SerializationHelper.SerializeObjectToString(expected, SerializationFormatterType.Binary);

            WfActivityMatrixResourceDescriptor actual = SerializationHelper.DeserializeStringToObject <WfActivityMatrixResourceDescriptor>(serializedData, SerializationFormatterType.Binary);

            Assert.AreEqual(expected.PropertyDefinitions.Count, actual.PropertyDefinitions.Count);
            Assert.AreEqual(expected.Rows.Count, actual.Rows.Count);

            Assert.AreEqual(expected.PropertyDefinitions.GetAllKeys().Count(), actual.PropertyDefinitions.GetAllKeys().Count());
        }
예제 #13
0
        public void AllReservedColumnsActivityMatrixQueryParamTest()
        {
            IWfProcessDescriptor processDesp = ProcessHelper.GetDynamicProcessDesp(ActivityMatrixHelper.PrepareReservedActivityMatrixResourceDescriptor());

            IWfProcess process = ProcessHelper.StartupProcess(processDesp, new Dictionary <string, object>());

            IWfActivityDescriptor normalActDesp         = processDesp.Activities["NormalActivity"];
            WfActivityMatrixResourceDescriptor resource = (WfActivityMatrixResourceDescriptor)normalActDesp.Resources[0];

            SOARoleContext context = SOARoleContext.CreateContext(resource.PropertyDefinitions, process);

            context.QueryParams.Output();
        }
예제 #14
0
        public void MergeMatchedActivityMatrixAndApprovalMatrixTest()
        {
            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareActivityMatrixResourceDescriptor();

            int originalCount = resource.Rows.Count;

            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareApprovalMatrix();

            resource.MergeApprovalMatrix(approvalMatrix);

            Assert.AreEqual(originalCount, resource.Rows.Count);

            resource.AssertAndOutputMatrixOperators();
        }
        private void ResponseExcelWorkBook(WfActivityMatrixResourceDescriptor activityMatrix, string fileName)
        {
            WorkBook workBook = WorkBook.CreateNew();

            workBook.Sheets.Clear();

            workBook.FillActivityMatrixResourceDescriptor(activityMatrix);

            Response.AppendExcelOpenXmlHeader(fileName);

            workBook.Save(Response.OutputStream);

            Response.End();
        }
예제 #16
0
        public static IWfProcessDescriptor GetDynamicProcessDesp()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.CreateSimpleProcessDescriptor();

            IWfActivityDescriptor normalActDesp = processDesp.Activities["NormalActivity"];

            normalActDesp.Properties.SetValue("IsDynamic", true);

            WfActivityMatrixResourceDescriptor resource = PrepareActivityMatrixResourceDescriptor();

            normalActDesp.Resources.Add(resource);

            return(processDesp);
        }
예제 #17
0
        public void MergeNotMatchedOneActivityMatrixAndApprovalMatrixTest()
        {
            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareOneRowActivityMatrixResourceDescriptor();

            int originalCount = resource.Rows.Count;

            resource.Rows[0].Values.FindByColumnName(SOARolePropertyDefinition.ActivityCodeColumn).Value = "NotMatched";
            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareOneRowApprovalMatrixResourceDescriptor();

            resource.MergeApprovalMatrix(approvalMatrix);

            Assert.AreEqual(approvalMatrix.PropertyDefinitions.Count, resource.Rows.Count);

            resource.AssertAndOutputMatrixOperators();
        }
예제 #18
0
        public static IWfProcessDescriptor GetDynamicProcessDesp(WfActivityMatrixResourceDescriptor activityMatrixResource, string externalMatrixID = null)
        {
            IWfProcessDescriptor processDesp = CreateSimpleProcessDescriptor();

            IWfActivityDescriptor normalActDesp = processDesp.Activities["NormalActivity"];

            normalActDesp.Properties.SetValue("IsDynamic", true);

            WfActivityMatrixResourceDescriptor resource = activityMatrixResource;

            normalActDesp.Resources.Add(resource);

            resource.ExternalMatrixID = externalMatrixID;

            return(processDesp);
        }
예제 #19
0
        public void ActiveMatrixResourceJsonSerializationTest()
        {
            WfActivityMatrixResourceDescriptor expected = ActivityMatrixHelper.PrepareActivityMatrixResourceDescriptor();

            WfConverterHelper.RegisterConverters();

            string serializedData = JSONSerializerExecute.Serialize(expected);

            Console.WriteLine(serializedData);

            WfActivityMatrixResourceDescriptor actual = JSONSerializerExecute.Deserialize <WfActivityMatrixResourceDescriptor>(serializedData);

            Assert.AreEqual(expected.PropertyDefinitions.Count, actual.PropertyDefinitions.Count);
            Assert.AreEqual(expected.Rows.Count, actual.Rows.Count);

            Assert.AreEqual(expected.PropertyDefinitions.GetAllKeys().Count(), actual.PropertyDefinitions.GetAllKeys().Count());
        }
예제 #20
0
        protected void UploadActivityMatrixProgress(HttpPostedFile file, UploadProgressResult result)
        {
            var fileType = Path.GetExtension(file.FileName).ToLower();

            if (fileType != ".xlsx")
            {
                throw new SystemSupportException("'{0}' 必须是xlsx文件。");
            }

            WorkBook workBook = WorkBook.Load(file.InputStream);

            WfActivityMatrixResourceDescriptor matrix = workBook.ToActivityMatrixResourceDescriptor("Matrix", "A3");

            result.Data        = JSONSerializerExecute.Serialize(matrix);
            result.DataChanged = true;
            result.CloseWindow = true;
        }
예제 #21
0
        public void ActivityMatrixQueryParamMismatchProcessTest()
        {
            IWfProcessDescriptor processDesp = ProcessHelper.GetDynamicProcessDesp();

            IWfProcess process = ProcessHelper.StartupProcess(processDesp, new Dictionary <string, object>());

            IWfActivityDescriptor normalActDesp         = processDesp.Activities["NormalActivity"];
            WfActivityMatrixResourceDescriptor resource = (WfActivityMatrixResourceDescriptor)normalActDesp.Resources[0];

            SOARoleContext context = SOARoleContext.CreateContext(resource.PropertyDefinitions, process);

            context.QueryParams.Output();

            Assert.AreEqual(3, context.QueryParams.Count);
            Assert.IsNull(context.QueryParams[0].QueryValue);
            Assert.IsNull(context.QueryParams[1].QueryValue);
            Assert.IsNull(context.QueryParams[2].QueryValue);
        }
예제 #22
0
        public void SameActivitySNActivityMatrixTest()
        {
            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareSameSNActivityMatrixResourceDescriptor();
            IWfProcessDescriptor processDesp            = ProcessHelper.GetDynamicProcessDesp(resource, string.Empty);

            IWfProcess process = ProcessHelper.StartupProcess(processDesp, new Dictionary <string, object>()
            {
                { "CostCenter", "1001" },
                { "PayMethod", "1" },
                { "Age", 30 }
            });

            Console.WriteLine(process.Activities.Count);

            WfOutputHelper.OutputMainStream(process);
            WfOutputHelper.OutputEveryActivities(process);

            Assert.AreEqual(4, process.Activities.Count);
        }
예제 #23
0
        public void FilterAndMergeEmptyActivityMatrixAndApprovalMatrixTest()
        {
            WfActivityMatrixResourceDescriptor resource = new WfActivityMatrixResourceDescriptor();

            SOARolePropertiesQueryParam queryParam = new SOARolePropertiesQueryParam();

            queryParam.QueryName  = "CostCenter";
            queryParam.QueryValue = "1001";

            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareApprovalMatrix();

            SOARolePropertyRowCollection approvalRows = approvalMatrix.Rows.Query(queryParam);

            resource.Rows.MergeApprovalMatrix(resource.PropertyDefinitions, approvalRows, approvalMatrix.PropertyDefinitions);

            //输出的只有RowNumber。因为活动矩阵没有列
            resource.Rows.AssertAndOutputMatrixOperators();

            Assert.AreEqual(3, resource.Rows.Count);
        }
예제 #24
0
        public void ActivityMatrixWithDynamicActivityTest()
        {
            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareDynamicActivityMatrixResourceDescriptor();
            IWfProcessDescriptor processDesp            = ProcessHelper.GetDynamicProcessDesp(resource, string.Empty);

            IWfProcess process = ProcessHelper.StartupProcess(processDesp, new Dictionary <string, object>()
            {
                { "CostCenter", "1001" },
                { "PayMethod", "1" },
                { "Age", 30 },
                { "ReportLine", new IUser[] { OguObjectSettings.GetConfig().Objects["approver1"].User, OguObjectSettings.GetConfig().Objects["cfo"].User } }
            });

            Console.WriteLine(process.Activities.Count);

            WfOutputHelper.OutputMainStream(process);
            WfOutputHelper.OutputEveryActivities(process);

            Assert.AreEqual(7, process.Activities.Count);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            WfConverterHelper.RegisterConverters();

            WfActivityMatrixResourceDescriptor activityMatrix = null;
            string fileName = "ActivityMatrix";

            if (Request.Form["matrixData"] != null)
            {
                activityMatrix = JSONSerializerExecute.Deserialize <WfActivityMatrixResourceDescriptor>(Request.Form["matrixData"]);

                fileName = "SampleMatrix";
            }
            else
            {
                activityMatrix = PrepareSampleActivityMatrixResourceDescriptor();
            }

            ResponseExcelWorkBook(activityMatrix, fileName);
        }
예제 #26
0
        public void WfActivityMatrixResourceSerializationTest()
        {
            IWfProcessDescriptor processDesp = WfProcessTestCommon.GetDynamicProcessDesp();

            XElementFormatter formatter = new XElementFormatter();

            XElement             rootProc          = formatter.Serialize(processDesp);
            IWfProcessDescriptor clonedProcessDesp = (IWfProcessDescriptor)formatter.Deserialize(rootProc);

            IWfActivityDescriptor normalActDesp       = processDesp.Activities["NormalActivity"];
            IWfActivityDescriptor clonedNormalActDesp = clonedProcessDesp.Activities["NormalActivity"];

            Assert.IsNotNull(normalActDesp);
            Assert.IsNotNull(clonedNormalActDesp);

            WfActivityMatrixResourceDescriptor matrixResource       = (WfActivityMatrixResourceDescriptor)normalActDesp.Resources[0];
            WfActivityMatrixResourceDescriptor clonedMatrixResource = (WfActivityMatrixResourceDescriptor)clonedNormalActDesp.Resources[0];

            Assert.AreEqual(matrixResource.PropertyDefinitions.Count, clonedMatrixResource.PropertyDefinitions.Count);
            Assert.AreEqual(matrixResource.Rows.Count, clonedMatrixResource.Rows.Count);
        }
예제 #27
0
        public void MergeNotMatchedActivityMatrixAndApprovalMatrixProcessTest()
        {
            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareApprovalMatrix();

            WfApprovalMatrixAdapter.Instance.Update(approvalMatrix);

            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareActivityMatrixResourceDescriptor();

            resource.Rows.ForEach(row => row.Values.FindByColumnName(SOARolePropertyDefinition.ActivityCodeColumn).Value = "NotMatched");

            IWfProcessDescriptor processDesp = ProcessHelper.GetDynamicProcessDesp(resource, approvalMatrix.ID);

            IWfProcess process = ProcessHelper.StartupProcess(processDesp, new Dictionary <string, object>()
            {
                { "CostCenter", "1001" },
                { "PayMethod", "1" },
                { "Age", 30 }
            });

            Console.WriteLine(process.Activities.Count);

            WfOutputHelper.OutputMainStream(process);
            WfOutputHelper.OutputEveryActivities(process);

            process.Activities.ForEach(act =>
            {
                if (act.Descriptor.ActivityType == WfActivityType.NormalActivity)
                {
                    if (act.Descriptor.Properties.GetValue("IsDynamic", false) == false)
                    {
                        Console.WriteLine(act.Descriptor.Name);
                        Assert.IsTrue(act.Descriptor.Name.IndexOf("审批") >= 0);
                    }
                }
            });

            Assert.AreEqual(8, process.Activities.Count);
        }
예제 #28
0
        public void MergeActivityMatrixWithDynamicActivityAndApprovalMatrixTest()
        {
            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareDynamicActivityMatrixResourceDescriptor();

            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareApprovalMatrix();

            WfApprovalMatrixAdapter.Instance.Update(approvalMatrix);

            IWfProcessDescriptor processDesp = ProcessHelper.GetDynamicProcessDesp(resource, approvalMatrix.ID);

            IWfProcess process = ProcessHelper.StartupProcess(processDesp, new Dictionary <string, object>()
            {
                { "CostCenter", "1001" },
                { "PayMethod", "1" },
                { "Age", 30 },
                { "ReportLine", new IUser[] { OguObjectSettings.GetConfig().Objects["approver1"].User, OguObjectSettings.GetConfig().Objects["cfo"].User } }
            });

            Console.WriteLine(process.Activities.Count);

            WfOutputHelper.OutputMainStream(process);
            WfOutputHelper.OutputEveryActivities(process);
        }
예제 #29
0
        public void FilterAndMergeMatchedActiveMatrixWithRoleAndApprovalMatrixTest()
        {
            SOARolePropertiesQueryParam queryParam = new SOARolePropertiesQueryParam();

            queryParam.QueryName  = "CostCenter";
            queryParam.QueryValue = "1002";

            WfActivityMatrixResourceDescriptor resource = ActivityMatrixHelper.PrepareActivityMatrixResourceDescriptor();

            SOARolePropertyRowCollection activityRows = resource.Rows.Query(queryParam);

            int originalCount = activityRows.Count;

            WfApprovalMatrix approvalMatrix = ApprovalMatrixHelper.PrepareApprovalMatrix();

            SOARolePropertyRowCollection approvalRows = approvalMatrix.Rows.Query(queryParam);

            activityRows.MergeApprovalMatrix(resource.PropertyDefinitions, approvalRows, approvalMatrix.PropertyDefinitions);

            activityRows.AssertAndOutputMatrixOperators();

            Assert.AreEqual(3, activityRows.Count);
        }
예제 #30
0
        public static void AreSame(this WfClientActivityMatrixResourceDescriptor expected, WfActivityMatrixResourceDescriptor actual)
        {
            AssertStringEqual(expected.ExternalMatrixID, actual.ExternalMatrixID);

            AreSame(expected.PropertyDefinitions, actual.PropertyDefinitions);

            AreSame(expected.Rows, actual.Rows);
        }