示例#1
0
        private List <object> GetRelationshipElements(TreeNode node)
        {
            var query = new DataQuery();

            var nodeRelationshipsQuery = RelationshipInfo.Provider.Get()
                                         .WhereEquals("LeftNodeID", node.NodeID);

            // Get all the relationships for the document and also empty records for every existing relationships that the document is not using to send a complete set of relationship elements
            var allRelationshipsQuery = query
                                        .From(
                @"
(" + query.IncludeDataParameters(nodeRelationshipsQuery.Parameters, nodeRelationshipsQuery.QueryText) + @") R
FULL OUTER JOIN CMS_RelationshipNameSite RNS ON R.RelationshipNameID = RNS.RelationshipNameID
LEFT JOIN CMS_RelationshipName RN ON RNS.RelationshipNameID = RN.RelationshipNameID
LEFT JOIN CMS_Tree T ON R.RightNodeID = T.NodeID
"
                )
                                        .Columns("NodeGUID", "RelationshipGUID")
                                        .WhereEqualsOrNull("RelationshipNameIsAdHoc", false)
                                        .WhereEquals("RNS.SiteID", node.NodeSiteID)
                                        .OrderBy("RelationshipOrder");

            var relationshipElements = allRelationshipsQuery
                                       .Result
                                       .Tables[0]
                                       .AsEnumerable()
                                       .GroupBy(row => (Guid)row["RelationshipGUID"])
                                       .Select(group => new {
                element = new
                {
                    external_id = ContentTypeSync.GetFieldExternalId(ContentTypeSync.RELATED_PAGES_GUID, group.Key)
                },
                value = (object)group
                        .Where(row => row["NodeGUID"] != DBNull.Value)
                        .Select(row => new { external_id = GetPageExternalId((Guid)row["NodeGUID"]) })
                        .ToList()
            })
                                       .Cast <object>()
                                       .ToList();

            return(relationshipElements);
        }
示例#2
0
        private async Task UpsertVariant(TreeNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            var externalId = GetPageExternalId(node.NodeGUID);
            var endpoint   = GetVariantEndpoint(node);

            var contentType = DataClassInfoProvider.GetDataClassInfo(node.NodeClassName);

            if (contentType == null)
            {
                throw new InvalidOperationException($"Content type {node.NodeClassName} not found.");
            }

            var formInfo = FormHelper.GetFormInfo(node.ClassName, false);

            if (formInfo == null)
            {
                throw new InvalidOperationException($"Form info for {node.NodeClassName} not found.");
            }

            var fieldsToSync  = ContentTypeSync.GetItemsToSync(node.NodeClassName).OfType <FormFieldInfo>();
            var fieldElements = await Task.WhenAll(
                fieldsToSync.Select(async(field) => new
            {
                element = new
                {
                    external_id = ContentTypeSync.GetFieldExternalId(contentType.ClassGUID, field.Guid)
                },
                value = await GetElementValue(node, field)
            })
                );

            var unsortedAttachmentsElement = new
            {
                element = new
                {
                    external_id = ContentTypeSync.GetFieldExternalId(contentType.ClassGUID, ContentTypeSync.UNSORTED_ATTACHMENTS_GUID)
                },
                value = (object)GetAttachmentGuids(node, null).Select(guid => new {
                    external_id = AssetSync.GetAttachmentExternalId(guid)
                })
            };
            var categoriesElement = new
            {
                element = new
                {
                    external_id = ContentTypeSync.GetFieldExternalId(contentType.ClassGUID, TaxonomySync.CATEGORIES_GUID)
                },
                value = (object)GetCategoryGuids(node).Select(guid => new {
                    external_id = TaxonomySync.GetCategoryTermExternalId(guid)
                }).ToList()
            };

            var relationshipElements = GetRelationshipElements(node);

            var payload = new
            {
                elements = fieldElements
                           .Concat(new[] {
                    unsortedAttachmentsElement,
                    categoriesElement,
                })
                           .Concat(relationshipElements)
                           .ToList()
            };

            await ExecuteWithoutResponse(endpoint, HttpMethod.Put, payload, true);
        }