/// <summary>
        /// Processes the item set changes for custom relationship.
        /// </summary>
        /// <param name="itemSetConfig">The item set.</param>
        /// <param name="selectedIds">The selected ids.</param>
        ///
        private void ProcessItemSetChangesForCustomRelationship(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig, string selectedIds)
        {
            var relationshipName   = itemSetConfig.pavelkh_RelationshipName;
            var selectedIdList     = ParseIdList(selectedIds);
            var inputTarget        = this.PluginContext.InputTargetAsEntity;
            var entity1LogicalName = inputTarget.LogicalName;
            var entity2LogicalName =
                itemSetConfig.pavelkh_EntityName == entity1LogicalName ?
                itemSetConfig.pavelkh_ItemSetEntityName :
                itemSetConfig.pavelkh_EntityName;
            var fetchXmlQuery = itemSetConfig.pavelkh_FetchXmlForIntersect.Replace(
                ItemSetBuilder.FetchXmlEntityIdPlaceHolder,
                inputTarget.Id.ToString("D"));
            var fetchExpression  = new FetchExpression(fetchXmlQuery);
            var service          = this.PluginContext.Service;
            var entityCollection = service.RetrieveMultiple(fetchExpression);
            var existingSelected = entityCollection.Entities.Select(r => r.Id).ToList();
            var itemsToAssociate = selectedIdList
                                   .Except(existingSelected)
                                   .Select(r => new EntityReference(entity2LogicalName, r))
                                   .ToList();

            this.Associate(relationshipName, itemsToAssociate);

            var itemsToDisassociate = existingSelected
                                      .Except(selectedIdList)
                                      .Select(r => new EntityReference(entity2LogicalName, r))
                                      .ToList();

            this.Disassociate(relationshipName, itemsToDisassociate);
        }
        /// <summary>
        /// The process check box set changes.
        /// </summary>
        /// <param name="itemSetConfig">The check box set.</param>
        private void ProcessItemSetChanges(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig)
        {
            var pluginContext     = this.PluginContext;
            var fakeFieldName     = itemSetConfig.pavelkh_DummySavingField;
            var sharedVariableKey = SharedVariableKeyPrefix + fakeFieldName;
            var value             = pluginContext.GetSharedVariable(sharedVariableKey, true);

            var ids = value?.ToString();

            if (string.IsNullOrWhiteSpace(ids))
            {
                return;
            }

            var customHandlerSpecified = !string.IsNullOrWhiteSpace(itemSetConfig.pavelkh_SaveChangesHandler);
            var isCustomRelationship   = itemSetConfig.pavelkh_IsCustomRelationship ?? false;

            if (isCustomRelationship || !customHandlerSpecified)
            {
                this.ProcessItemSetChangesForCustomRelationship(itemSetConfig, ids);
            }
            else
            {
                this.ProcessItemSetChangesByCustomHandler(itemSetConfig, ids);
            }
        }
        /// <summary>
        /// Processes the item set changes for out-of-box relationship by custom handler.
        /// </summary>
        /// <param name="itemSetConfig">The item set.</param>
        /// <param name="selectedIds">The selected ids.</param>
        ///
        private void ProcessItemSetChangesByCustomHandler(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig, string selectedIds)
        {
            var handlerActionName = itemSetConfig.pavelkh_SaveChangesHandler;

            var request = new OrganizationRequest(handlerActionName)
            {
                [CustomSaveHandlerItemSetParamName]        = itemSetConfig.pavelkh_ItemSetName,
                [CustomSaveHandlerEntityRefParamName]      = this.PluginContext.PrimaryEntityRef,
                [CustomSaveHandlerSelectedIdListParamName] = selectedIds
            };

            var service = this.PluginContext.Service;

            service.Execute(request);
        }
        /// <summary>
        /// The save fake field value.
        /// </summary>
        /// <param name="itemSetConfig">
        /// The item.
        /// </param>
        private void SaveFakeFieldValue(pavelkh_advancedmultiselectitemsetconfiguration itemSetConfig)
        {
            var target        = this.PluginContext.InputTargetAsEntity;
            var fakeFieldName = itemSetConfig.pavelkh_DummySavingField;

            if (string.IsNullOrWhiteSpace(fakeFieldName))
            {
                throw new InvalidPluginExecutionException($"There is an error in configuration for '{ itemSetConfig.pavelkh_ItemSetName }' entity set. The dummy field is not specifed");
            }

            if (!target.Contains(fakeFieldName))
            {
                return;
            }

            var ids = target.GetAttributeValue <string>(fakeFieldName);
            var sharedVariableKey = SharedVariableKeyPrefix + fakeFieldName;

            this.PluginContext.SetSharedVariable(sharedVariableKey, ids);
            target[fakeFieldName] = null;
        }
Example #5
0
        public void PublishAfterRenaming()
        {
            var pluginContext = this.PluginContext;

            pluginContext.Trace("Publishing after Item Set Configuration renaming...");
            var itemSetConfigurationId = this.PluginContext.PrimaryEntityId;
            var ctx        = pluginContext.OrgCtx;
            var entityName = ctx.pavelkh_advancedmultiselectitemsetconfigurationSet.Where(
                r => r.pavelkh_advancedmultiselectitemsetconfigurationId == itemSetConfigurationId)
                             .Select(r => r.pavelkh_EntityName)
                             .FirstOrDefault();
            var service = pluginContext.Service;

            MetadataUtils.PublishEntity(service, entityName);
            var configUpdate = new pavelkh_advancedmultiselectitemsetconfiguration()
            {
                pavelkh_advancedmultiselectitemsetconfigurationId = itemSetConfigurationId,
                pavelkh_PublishRequired = false
            };

            service.Update(configUpdate);
        }
Example #6
0
        private void InitItemSetConfig()
        {
            this.PluginContext.Trace("Initiating Item Set Config...");
            var ctx = this.PluginContext.OrgCtxAsSystemUser;

            this.ItemSetConfig =
                ctx.pavelkh_advancedmultiselectitemsetconfigurationSet.Where(
                    r => r.pavelkh_EntityName == this.entityLogicalName && r.pavelkh_ItemSetName == this.itemSetName)
                .Select(r => new pavelkh_advancedmultiselectitemsetconfiguration
            {
                pavelkh_advancedmultiselectitemsetconfigurationId = r.pavelkh_advancedmultiselectitemsetconfigurationId,
                pavelkh_FetchXml                              = r.pavelkh_FetchXml,
                pavelkh_FetchXmlForEditMode                   = r.pavelkh_FetchXmlForEditMode,
                pavelkh_IntersectEntityName                   = r.pavelkh_IntersectEntityName,
                pavelkh_IntersectEntityRefAttributeName       = r.pavelkh_IntersectEntityRefAttributeName,
                pavelkh_EntityName                            = r.pavelkh_EntityName,
                pavelkh_EntityAttributeName                   = r.pavelkh_EntityAttributeName,
                pavelkh_ItemSetEntityName                     = r.pavelkh_ItemSetEntityName,
                pavelkh_ItemSetEntityAttributeName            = r.pavelkh_ItemSetEntityAttributeName,
                pavelkh_DummySavingField                      = r.pavelkh_DummySavingField,
                pavelkh_LabelAttributeName                    = r.pavelkh_LabelAttributeName,
                pavelkh_TooltipAttributeName                  = r.pavelkh_TooltipAttributeName,
                pavelkh_HandleSecurityPrivileges              = r.pavelkh_HandleSecurityPrivileges,
                pavelkh_EntityHasOrganizationOwnership        = r.pavelkh_EntityHasOrganizationOwnership,
                pavelkh_ItemSetEntityHasOrganizationOwnership = r.pavelkh_ItemSetEntityHasOrganizationOwnership
            })
                .FirstOrDefault();

            if (this.ItemSetConfig != null)
            {
                return;
            }

            var errorMessage = $"An error occurred while getting the list of items. '{this.itemSetName}' Item Set for {this.entityLogicalName} entity is not found in the configuration.";

            throw new InvalidPluginExecutionException(errorMessage);
        }