예제 #1
0
        private async Task <RecordEntry> CreateRecord(string folderName, string nodeId, string nodeType, string assocType)
        {
            var folderInfo = await GetRMFolder(folderName);

            var nodeInfo = await _alfrescoHttpClient.GetNodeInfo(nodeId);

            var properties = nodeInfo.Entry.Properties.As <JObject>().ToDictionary();

            int.TryParse(properties.GetNestedValueOrDefault(SpisumNames.Properties.RetentionPeriod)?.ToString(),
                         out int retentionPeriod);
            DateTime.TryParse(properties.GetNestedValueOrDefault(SpisumNames.Properties.SettleDate)?.ToString(),
                              out DateTime settleDate);

            var shreddingDate = new DateTime(settleDate.Year + 1 + retentionPeriod, 1, 1);

            await _alfrescoHttpClient.UpdateNode(nodeId, new NodeBodyUpdate()
                                                 .AddProperty(SpisumNames.Properties.ShreddingYear, shreddingDate.Year.ToString()));

            var body = new RMNodeBodyCreate
            {
                Name       = nodeInfo?.Entry?.Name,
                NodeType   = nodeType,
                Properties = new Dictionary <string, string>
                {
                    { SpisumNames.Properties.Ref, nodeId },
                    { SpisumNames.Properties.ShreddingYear, shreddingDate.Year.ToString() }
                }
            };

            properties.ForEach(x =>
            {
                var(key, value) = x;

                if (!key.StartsWith("ssl:"))
                {
                    return;
                }

                if (key.Equals(SpisumNames.Properties.Pid))
                {
                    body.Properties.Add(SpisumNames.Properties.PidRef, $"{value}");
                    body.Properties.Add(SpisumNames.Properties.Pid, $"RM-{value}");
                    return;
                }

                // Problems only with datetime for now
                if (DateTime.TryParse(value?.ToString(), out DateTime datetime))
                {
                    body.Properties.Add(key, datetime.ToAlfrescoDateTimeString());
                }
                else
                {
                    body.Properties.Add(key, $"{value}");
                }
            });

            var node = await _alfrescoHttpClient.CreateRecord(folderInfo?.Entry?.Id, body);

            // Create secondary children to orig document/file. It cannot be set from repository to RM
            await _alfrescoHttpClient.CreateNodeSecondaryChildren(node?.Entry?.Id, new ChildAssociationBody
            {
                AssocType = assocType,
                ChildId   = nodeId
            });

            // Set record as complete
            await _alfrescoHttpClient.CompleteRecord(node?.Entry?.Id);

            // Call retention date
            await _alfrescoHttpClient.ExecutionQueue(new ExecutionQueue
            {
                Name    = "editDispositionActionAsOfDate",
                NodeRef = $"workspace://SpacesStore/{node?.Entry?.Id}",
                Params  = new ExecutionQueueParams
                {
                    AsOfDate = new ExecutionQueueParamsAsOfDate
                    {
                        Iso8601 = shreddingDate.ToAlfrescoDateTimeString()
                    }
                }
            });

            return(node);
        }