private void DeployContentTypeOrder(object modelHost, ContentType contentType, UniqueContentTypeFieldsOrderDefinition reorderFieldLinksModel)
        {
            var context = contentType.Context;

            context.Load(contentType, c => c.FieldLinks);
            context.Load(contentType, c => c.Fields);

            context.ExecuteQueryWithTrace();

            var fieldLinks = contentType.FieldLinks.ToList();
            var fields = contentType.Fields.ToList();

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioning,
                Object = contentType,
                ObjectType = typeof(ContentType),
                ObjectDefinition = reorderFieldLinksModel,
                ModelHost = modelHost
            });

            var newOrder = new List<string>();

            // re-order
            foreach (var srcFieldLink in reorderFieldLinksModel.Fields)
            {
                Field currentField = null;

                if (!string.IsNullOrEmpty(srcFieldLink.InternalName))
                    currentField = fields.FirstOrDefault(c => c.InternalName == srcFieldLink.InternalName);

                if (currentField == null && srcFieldLink.Id.HasValue)
                    currentField = fields.FirstOrDefault(c => c.Id == srcFieldLink.Id.Value);

                if (currentField != null)
                {
                    // must always be internal name of the field
                    if (!newOrder.Contains(currentField.InternalName))
                        newOrder.Add(currentField.InternalName);
                }
            }

            if (newOrder.Count > 0)
                contentType.FieldLinks.Reorder(newOrder.ToArray());

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model = null,
                EventType = ModelEventType.OnProvisioned,
                Object = contentType,
                ObjectType = typeof(ContentType),
                ObjectDefinition = reorderFieldLinksModel,
                ModelHost = modelHost
            });
        }
 public static ModelNode AddUniqueContentTypeFieldsOrder(this ModelNode model, UniqueContentTypeFieldsOrderDefinition definition, Action<ModelNode> action)
 {
     return model.AddDefinitionNode(definition, action);
 }
 public static ModelNode AddUniqueContentTypeFieldsOrder(this ModelNode model, UniqueContentTypeFieldsOrderDefinition definition)
 {
     return AddUniqueContentTypeFieldsOrder(model, definition, null);
 }