xpna.GlobalPlanServiceglobal with sharing class GlobalPlanService
This class contains global methods to perform plan related operations. This class contains deprecated items. EnumsFilterComparisonOperatorRepresents the condition operators that you can use to apply filter logic.
FilterLogicalOperatorRepresents the operators that you can use to apply filter logic.
Methods
createBlankPlansglobal static xpna.GlobalPlanService.PlanBlankCreateResponseCollection createBlankPlans(xpna.GlobalPlanService.PlanBlankCreateRequestCollection request) Creates a blank plan. Input Parameters
Return ValueThe PlanBlankCreateResponse of the newly created plan. Sample Code
//Note: This sample code is for demonstration purposes only. It is not intended for
//use in a production environment, is not guaranteed against defects or errors, and
//is in no way optimized or streamlined.
//Create an instance of PlanBlankCreateRequest.
xpna.GlobalPlanService.PlanBlankCreateRequest request = new xpna.GlobalPlanService.PlanBlankCreateRequest();
request.planName = 'Blank Plan Example Name';
request.currentScenarioName = 'Initial';
request.description = 'Description';
//Get the dimensions that are used to create the plan.
Id accountDimensionId = [SELECT Id from Dimension__c where Name = 'Account'][0].Id;
Id projectManagerDimensionId = [SELECT Id from Dimension__c where Name = 'Project Manager'][0].Id;
Id practice0DimensionId = [SELECT Id from Dimension__c where Name = 'Practice Level 00'][0].Id;
Id timePeriodYearDimensionId = [SELECT Id from Dimension__c where Name = 'Time Period Year'][0].Id;
//Get the measure that is used to create the plan.
Id forecastMeasureId = [SELECT Id from Measure__c where Name = 'Forecast'][0].Id;
//Get dimensions that are used to create the plan as rows.
request.dimensionRowIds = new List<Id>{accountDimensionId, projectManagerDimensionId, practice0DimensionId};
//Get dimensions that are used to create the plan as columns.
request.dimensionColumnIds = new List<Id>{timePeriodYearDimensionId};
//Get the measures that are used to create the plan.
request.measureIds = new List<Id>{forecastMeasureId};
//Optional, by default it is true if you do not provide it.
request.measureAsColumns = true;
//Optional, by default it is null if you do not provide it.
List<xpna__RateTable__c> rateTableList = [SELECT Id FROM xpna__RateTable__c WHERE Name = 'Rate Table'];
Id rateTableId = rateTableList[0].Id;
request.rateTableId = rateTableId;
//Specify the grid view.
request.gridView = 'TreeGrid';
//Create an instance of the object request.
xpna.GlobalPlanService.PlanBlankCreateRequestCollection requestCollection = new xpna.GlobalPlanService.PlanBlankCreateRequestCollection();
//Add a new PlanBlankCreateRequest to the request list.
requestCollection.planBlankCreateRequests.add(request);
//Call the API method.
xpna.GlobalPlanService.PlanBlankCreateResponseCollection result = xpna.GlobalPlanService.createBlankPlans(requestCollection);
createPlansFromAnalyticsglobal static xpna.GlobalPlanService.PlanFromAnalyticsCreateResponseCollection createPlansFromAnalytics(xpna.GlobalPlanService.PlanFromAnalyticsCreateRequestCollection request) Creates a plan from Analytics data source. Input Parameters
Return ValueThe PlanFromAnalyticsCreateResponse of the newly created plan. Sample Code
//Note: This sample code is for demonstration purposes only. It is not intended for
//use in a production environment, is not guaranteed against defects or errors, and
//is in no way optimized or streamlined.
//Create an instance of PlanFromAnalyticsCreateRequest.
xpna.GlobalPlanService.PlanFromAnalyticsCreateRequest request = new xpna.GlobalPlanService.PlanFromAnalyticsCreateRequest();
request.planName = 'Plan From Analytics Example Name';
request.currentScenarioName = 'Initial';
request.description = 'Description';
//Get the Data Source that is used to create the plan.
Id dataSourceId = [SELECT Id from Datasource__c where Name='Service Forecasting'][0].Id;
request.dataSourceId = dataSourceId;
//Get the dimensions that are used to create the plan.
Id accountDimensionId = [SELECT Id from Dimension__c where Name = 'Account'][0].Id;
Id projectManagerDimensionId = [SELECT Id from Dimension__c where Name = 'Project Manager'][0].Id;
Id practice0DimensionId = [SELECT Id from Dimension__c where Name = 'Practice Level 00'][0].Id;
Id timePeriodYearDimensionId = [SELECT Id from Dimension__c where Name = 'Time Period Year'][0].Id;
//Get the measure that is used to create the plan.
Id forecastMeasureId = [SELECT Id from Measure__c where Name = 'Forecast'][0].Id;
//Get dimensions that are used to create the plan as rows.
request.dimensionRowIds = new List<Id>{accountDimensionId, projectManagerDimensionId, practice0DimensionId};
//Get dimensions that are used to create the plan as columns.
request.dimensionColumnIds = new List<Id>{timePeriodYearDimensionId};
//Get the measures that are used to create the plan.
request.measureIds = new List<Id>{forecastMeasureId};
//Optional, by default it is true if you do not provide it.
request.measureAsColumns = true;
//Optional, by default it is null if you do not provide it.
List<xpna__RateTable__c> rateTableList = [SELECT Id FROM xpna__RateTable__c WHERE Name = 'Rate Table'];
Id rateTableId = rateTableList[0].Id;
request.rateTableId = rateTableId;
//Optional, set a dimension value map.
Id dimensionMapped = timePeriodYearDimensionId;
Map<String, String> valueMappings = new Map<String, String>();
valueMappings.put('Australia', 'Spain');
valueMappings.put('United Kingdom', 'Spain');
Map<Id, Map<String, String>> dimensionValueMappings = new Map<Id, Map<String, String>>();
dimensionValueMappings.put(dimensionMapped, valueMappings);
xpna.GlobalPlanService.DimensionValueMappingCollection dimensionValueMappingCollection = new xpna.GlobalPlanService.DimensionValueMappingCollection();
dimensionValueMappingCollection.dimensionValueMappings = dimensionValueMappings;
request.valueMappings = dimensionValueMappingCollection;
//Optional, filters for the dimension value.
xpna.GlobalPlanService.TreeFilterCollection filterCollection = new xpna.GlobalPlanService.TreeFilterCollection();
xpna.GlobalPlanService.ConditionGroup conditionGroup = new xpna.GlobalPlanService.ConditionGroup();
//Define a condition to filter by the 'Time Period Year' dimension, allowing only values equal to '2025'.
xpna.GlobalPlanService.Condition condition1 = new xpna.GlobalPlanService.Condition();
condition1.dimensionId = timePeriodYearDimensionId;
condition1.comparisonOperator = xpna.GlobalPlanService.FilterComparisonOperator.EQUAL;
condition1.values = new List<String>{ '2025'};
//Define a condition to filter by the 'Time Period Year' dimension, allowing only values equal to '2024'.
xpna.GlobalPlanService.Condition condition2 = new xpna.GlobalPlanService.Condition();
condition2.dimensionId = timePeriodYearDimensionId;
condition2.comparisonOperator = xpna.GlobalPlanService.FilterComparisonOperator.EQUAL;
condition2.values = new List<String>{ '2024'};
//Set the logical operator for the filter group.
conditionGroup.logicalOperator = xpna.GlobalPlanService.FilterLogicalOperator.OR_LOGIC;
//Add the conditions to the condition group
conditionGroup.filters.add(condition1);
conditionGroup.filters.add(condition2);
//Set the condition group to the filter request collection
filterCollection.filters = conditionGroup;
request.filters = filterCollection;
//Specify the grid view.
request.gridView = 'TreeGrid';
//Create an instance of the object request.
xpna.GlobalPlanService.PlanFromAnalyticsCreateRequestCollection requestCollection = new xpna.GlobalPlanService.PlanFromAnalyticsCreateRequestCollection();
//Add a new PlanFromAnalyticsCreateRequest to the request list.
requestCollection.planFromAnalyticsCreateRequests.add(request);
//Call the API method.
xpna.GlobalPlanService.PlanFromAnalyticsCreateResponseCollection result = xpna.GlobalPlanService.createPlansFromAnalytics(requestCollection);
createMultiplePlansFromAnalyticsglobal static xpna.GlobalPlanService.MultiPlanCreateResponseCollection createMultiplePlansFromAnalytics(xpna.GlobalPlanService.MultiPlanCreateRequestCollection request) Creates multiple plans from an Analytics data source. Input Parameters
Return ValueA collection of responses containing details of the newly created plans. Sample Code
//Note: This sample code is for demonstration purposes only. It is not intended for
//use in a production environment, is not guaranteed against defects or errors, and
//is in no way optimized or streamlined.
//Create an instance of PlanFromAnalyticsCreateRequest.
xpna.GlobalPlanService.PlanFromAnalyticsCreateRequest planDefinition = new xpna.GlobalPlanService.PlanFromAnalyticsCreateRequest();
planDefinition.planName = 'Multi plan example ';
planDefinition.currentScenarioName = 'Initial';
planDefinition.description = 'Description';
//Get the Data Source that is used to create the plan.
Id dataSourceId = [SELECT Id from Datasource__c where Name='Service Forecasting'][0].Id;
planDefinition.dataSourceId = dataSourceId;
//Get the dimensions that are used to create the plan.
Id accountDimensionId = [SELECT Id from Dimension__c where Name = 'Account'][0].Id;
Id projectManagerDimensionId = [SELECT Id from Dimension__c where Name = 'Project Manager'][0].Id;
Id practice0DimensionId = [SELECT Id from Dimension__c where Name = 'Practice Level 00'][0].Id;
Id timePeriodYearDimensionId = [SELECT Id from Dimension__c where Name = 'Time Period Year'][0].Id;
//Get the measure that is used to create the plan.
Id forecastMeasureId = [SELECT Id from Measure__c where Name = 'Forecast'][0].Id;
//Get dimensions that are used to create the plan as rows.
planDefinition.dimensionRowIds = new List<Id>{accountDimensionId, projectManagerDimensionId, practice0DimensionId};
//Get dimensions that are used to create the plan as columns.
planDefinition.dimensionColumnIds = new List<Id>{timePeriodYearDimensionId};
//Get the measures that are used to create the plan.
planDefinition.measureIds = new List<Id>{forecastMeasureId};
//Optional, by default it is true if you do not provide it.
planDefinition.measureAsColumns = true;
//Optional: Set a dimension value mapping for predefined values.
Map<Id, Map<String, String>> dimensionValueMappings = new Map<Id, Map<String, String>>();
dimensionValueMappings.put(timePeriodYearDimensionId, new Map<String, String> {'2024' => '400000'});
//Create a DimensionValueMappingCollection object and assign the mapping.
xpna.GlobalPlanService.DimensionValueMappingCollection dimensionValueMappingCollection = new xpna.GlobalPlanService.DimensionValueMappingCollection();
dimensionValueMappingCollection.dimensionValueMappings = dimensionValueMappings;
planDefinition.valueMappings = dimensionValueMappingCollection;
//Optional: Define filters for the plan definition.
xpna.GlobalPlanService.TreeFilterCollection filterCollection = new xpna.GlobalPlanService.TreeFilterCollection();
xpna.GlobalPlanService.ConditionGroup conditionGroup = new xpna.GlobalPlanService.ConditionGroup();
//Define a condition to filter by the 'Time Period Year' dimension, allowing only values equal to '2024'.
xpna.GlobalPlanService.Condition condition2 = new xpna.GlobalPlanService.Condition();
condition2.dimensionId = timePeriodYearDimensionId;
condition2.comparisonOperator = xpna.GlobalPlanService.FilterComparisonOperator.EQUAL;
condition2.values = new List<String>{ '2024'};
//Set the logical operator for the filter group.
conditionGroup.logicalOperator = xpna.GlobalPlanService.FilterLogicalOperator.AND_LOGIC;
conditionGroup.filters.add(condition2);
//Assign the filters to the planDefinition.
filterCollection.filters = conditionGroup;
planDefinition.filters = filterCollection;
//Optional: Define additional filter for the plans and affect number of plans created.
xpna.GlobalPlanService.TreeFilterCollection additionalFilterCollection = new xpna.GlobalPlanService.TreeFilterCollection();
xpna.GlobalPlanService.ConditionGroup additionalConditionGroup = new xpna.GlobalPlanService.ConditionGroup();
//Define a condition to filter by the 'Account Industry' dimension to only create plans for dimensions that starts with 'Co'.
Id accountIndustryDimensionId = [SELECT Id from Dimension__c where Name = 'Account Industry'][0].Id;
String accountIndustryDimensionFieldName = [SELECT FieldName__c from DimensionMapping__c where Dimension__c = :accountIndustryDimensionId][0].FieldName__c;
xpna.GlobalPlanService.Condition dimensionCondition = new xpna.GlobalPlanService.Condition();
dimensionCondition.dimensionId = accountIndustryDimensionId;
dimensionCondition.dimensionFieldName = accountIndustryDimensionFieldName;
dimensionCondition.comparisonOperator = xpna.GlobalPlanService.FilterComparisonOperator.START_WITH;
dimensionCondition.values = new List<String>{ 'Co'};
//Set the logical operator for the filter group.
additionalConditionGroup.logicalOperator = xpna.GlobalPlanService.FilterLogicalOperator.AND_LOGIC;
additionalConditionGroup.filters.add(dimensionCondition);
//Assign the filters to the spread info.
xpna.GlobalPlanService.MultiPlanFromAnalyticsSpreadBasicInfo spreadInfo = new xpna.GlobalPlanService.MultiPlanFromAnalyticsSpreadBasicInfo();
additionalFilterCollection.filters = additionalConditionGroup;
spreadInfo.filters = additionalFilterCollection;
//Specify the grid view type.
planDefinition.gridView = 'TreeGrid';
//Create an instance of a basic multi plan request which will contain the plan definition and the spread info
xpna.GlobalPlanService.BasicMultiPlanCreateRequest basicMultiPlanRequest = new xpna.GlobalPlanService.BasicMultiPlanCreateRequest();
//Set the plan definition to the request multi plan request object
basicMultiPlanRequest.planDefinition = planDefinition;
//Set the spread info to the request multi plan request object
spreadInfo.dimensionIds.add(accountIndustryDimensionId);
basicMultiPlanRequest.spreadInfo = spreadInfo;
//Set the basic multi plan request object to the collection request
xpna.GlobalPlanService.MultiPlanCreateRequestCollection multiPlanCreateRequest = new xpna.GlobalPlanService.MultiPlanCreateRequestCollection();
multiPlanCreateRequest.multiPlanCreateRequests.add(basicMultiPlanRequest);
//Call the API method to create the plans.
xpna.GlobalPlanService.MultiPlanCreateResponseCollection result = xpna.GlobalPlanService.createMultiplePlansFromAnalytics(multiPlanCreateRequest);
deletePlansglobal static xpna.GlobalPlanService.PlanDeleteResponseCollection deletePlans(xpna.GlobalPlanService.PlanDeleteRequestCollection request) Deletes the plans. Input Parameters
Return ValueA list of PlanResponse. Sample Code
//Note: This sample code is for demonstration purposes only. It is not intended for
//use in a production environment, is not guaranteed against defects or errors, and
//is in no way optimized or streamlined.
//Create an instance of the object request.
xpna.GlobalPlanService.PlanDeleteRequestCollection request = new xpna.GlobalPlanService.PlanDeleteRequestCollection();
//Create an instance of PlanDeleteRequest and set the ID of the plan to be deleted.
xpna.GlobalPlanService.PlanDeleteRequest planToDeleteRequest = new xpna.GlobalPlanService.PlanDeleteRequest();
planToDeleteRequest.planId = Id.valueOf('a0D7X0000050TrEUAU');
//Add a new PlanDeleteRequest to the request list.
request.planDeleteRequests.add(planToDeleteRequest);
//Call the API method.
xpna.GlobalPlanService.PlanDeleteResponseCollection result = xpna.GlobalPlanService.deletePlans(request);
DeprecatedThe following items are deprecated and not supported for use. We recommend that you stop using these items to avoid exceptions. xpna.GlobalPlanService.DimensionFilterglobal with sharing class DimensionFilter extends Filter Represents the information needed to filter a dimension. This class extends xpna.GlobalPlanService.Filter Properties
Methodsxpna.GlobalPlanService.ValueMappingCollectionglobal with sharing abstract class ValueMappingCollection Represents the mappings to be used when creating a plan from Analytics. xpna.GlobalPlanService.DimensionValueMappingCollectionglobal with sharing class DimensionValueMappingCollection extends ValueMappingCollection Provides the information about the value mapping for a given dimension to be used when creating a plan from Analytics. This class extends xpna.GlobalPlanService.ValueMappingCollection Properties
MethodsDimensionValueMappingCollectionglobal DimensionValueMappingCollection() Creates a new empty DimensionValueMappingCollection. xpna.GlobalPlanService.Filterglobal with sharing abstract class Filter Contains the required information of the plan delete operation. Represents a filter to be used when creating a plan from Analytics. xpna.GlobalPlanService.FilterCollectionglobal with sharing abstract class FilterCollection Represents the filters to be used when creating a plan from Analytics. xpna.GlobalPlanService.TreeFilterCollectionglobal with sharing class TreeFilterCollection extends FilterCollection Represents a tree structure of filters used in Analytics. This class extends xpna.GlobalPlanService.FilterCollection Properties
Methodsxpna.GlobalPlanService.Conditionglobal with sharing class Condition extends Filter Represents a condition filter used in Analytics. This class extends xpna.GlobalPlanService.Filter Properties
Methodsxpna.GlobalPlanService.ConditionGroupglobal with sharing class ConditionGroup extends Filter Represents a logical group of filter conditions. This class extends xpna.GlobalPlanService.Filter Properties
Methodsxpna.GlobalPlanService.ListFilterCollectionglobal with sharing class ListFilterCollection extends FilterCollection Provides the information about the simple version of dimension filters (AND operator) to be used when creating a plan from Analytics. This class extends xpna.GlobalPlanService.FilterCollection Properties
Methodsxpna.GlobalPlanService.PlanBlankCreateRequestglobal with sharing class PlanBlankCreateRequest extends PlanCreateRequest Contains methods and structures that are used to create a blank plan. This class extends xpna.GlobalPlanService.PlanCreateRequest Methodsxpna.GlobalPlanService.PlanBlankCreateRequestCollectionglobal with sharing class PlanBlankCreateRequestCollection Contains methods and structures that are used to create a blank plan. Properties
MethodsPlanBlankCreateRequestCollectionglobal PlanBlankCreateRequestCollection() Creates a new empty PlanBlankCreateRequestCollection. xpna.GlobalPlanService.PlanBlankCreateResponseglobal virtual with sharing class PlanBlankCreateResponse Contains a structure that returns the creation of a blank plan. Properties
MethodsPlanBlankCreateResponseglobal PlanBlankCreateResponse() Creates a new empty PlanBlankCreateResponse. xpna.GlobalPlanService.PlanBlankCreateResponseCollectionglobal with sharing class PlanBlankCreateResponseCollection Contains a structure that returns the creation of blank plans. Properties
MethodsPlanBlankCreateResponseCollectionglobal PlanBlankCreateResponseCollection() Creates a new empty PlanBlankCreateResponseCollection. xpna.GlobalPlanService.PlanCreateRequestglobal virtual with sharing class PlanCreateRequest Provides the information required to create a plan. Properties
Methodsxpna.GlobalPlanService.PlanDeleteRequestglobal with sharing class PlanDeleteRequest Provides the information required to delete a plan. Properties
Methodsxpna.GlobalPlanService.PlanDeleteRequestCollectionglobal with sharing class PlanDeleteRequestCollection Contains the required information for the plan delete operation. Properties
MethodsPlanDeleteRequestCollectionglobal PlanDeleteRequestCollection() Default empty constructor to represent the class outside the namespace. xpna.GlobalPlanService.PlanDeleteResponseglobal with sharing class PlanDeleteResponse Contains the returning information of the delete plan operation. Properties
MethodsPlanDeleteResponseglobal PlanDeleteResponse() Default empty constructor to represent the class outside the namespace. xpna.GlobalPlanService.PlanDeleteResponseCollectionglobal with sharing class PlanDeleteResponseCollection Contains the returning information of the plan delete operation. Properties
MethodsPlanDeleteResponseCollectionglobal PlanDeleteResponseCollection() Default empty constructor to represent the class outside the namespace. xpna.GlobalPlanService.PlanFromAnalyticsCreateRequestglobal with sharing class PlanFromAnalyticsCreateRequest extends PlanCreateRequest Contains methods and structures that are used to create a plan from an Analytics data source. This class extends xpna.GlobalPlanService.PlanCreateRequest Properties
MethodsPlanFromAnalyticsCreateRequestglobal PlanFromAnalyticsCreateRequest() Creates a new empty PlanFromAnalyticsCreateRequest. xpna.GlobalPlanService.PlanFromAnalyticsCreateRequestCollectionglobal with sharing class PlanFromAnalyticsCreateRequestCollection Contains methods and structures that are used to create a plan from an Analytics data source. Properties
MethodsPlanFromAnalyticsCreateRequestCollectionglobal PlanFromAnalyticsCreateRequestCollection() Creates a new empty PlanFromAnalyticsCreateRequestCollection. xpna.GlobalPlanService.PlanFromAnalyticsCreateResponseglobal virtual with sharing class PlanFromAnalyticsCreateResponse Contains a structure that returns the creation of a plan from Analytics. Properties
MethodsPlanFromAnalyticsCreateResponseglobal PlanFromAnalyticsCreateResponse() Creates a new empty PlanFromAnalyticsCreateResponse. xpna.GlobalPlanService.PlanFromAnalyticsCreateResponseCollectionglobal with sharing class PlanFromAnalyticsCreateResponseCollection Contains a structure that returns the creation of plans from Analytics. Properties
MethodsPlanFromAnalyticsCreateResponseCollectionglobal PlanFromAnalyticsCreateResponseCollection() Creates a new empty PlanFromAnalyticsCreateResponseCollection. xpna.GlobalPlanService.MultiPlanCreateRequestglobal virtual with sharing class MultiPlanCreateRequest Contains a structure that represents a request for creating multiple plans. xpna.GlobalPlanService.MultiPlanCreateResponseglobal virtual with sharing class MultiPlanCreateResponse Contains the structure that represents a response for creating multiple plans. xpna.GlobalPlanService.BasicMultiPlanCreateResponseglobal with sharing class BasicMultiPlanCreateResponse extends MultiPlanCreateResponse Contains the structure that represents a response for creating multiple plans. This class extends xpna.GlobalPlanService.MultiPlanCreateResponse Properties
MethodsBasicMultiPlanCreateResponseglobal BasicMultiPlanCreateResponse() Creates a new empty BasicMultiPlanCreateResponse. xpna.GlobalPlanService.BasicMultiPlanCreateRequestglobal with sharing class BasicMultiPlanCreateRequest extends MultiPlanCreateRequest Represents a basic request for creating multiple plans from Analytics. This class extends xpna.GlobalPlanService.MultiPlanCreateRequest Properties
MethodsBasicMultiPlanCreateRequestglobal BasicMultiPlanCreateRequest() Creates a new empty BasicMultiPlanCreateRequest. xpna.GlobalPlanService.MultiPlanCreateResponseCollectionglobal with sharing class MultiPlanCreateResponseCollection Contains a structure for the creation of multiple plans response. Properties
MethodsMultiPlanCreateResponseCollectionglobal MultiPlanCreateResponseCollection() Creates a new empty MultiPlanCreateResponseCollection. xpna.GlobalPlanService.MultiPlanCreateRequestCollectionglobal with sharing class MultiPlanCreateRequestCollection Contains a structure for the creation of multiple plans. Properties
MethodsMultiPlanCreateRequestCollectionglobal MultiPlanCreateRequestCollection() Creates a new empty MultiPlanCreateRequestCollection. xpna.GlobalPlanService.MultiPlanFromAnalyticsSpreadInfoglobal virtual with sharing class MultiPlanFromAnalyticsSpreadInfo xpna.GlobalPlanService.MultiPlanFromAnalyticsSpreadBasicInfoglobal with sharing class MultiPlanFromAnalyticsSpreadBasicInfo extends MultiPlanFromAnalyticsSpreadInfo Represents basic spread information for MultiPlan in Analytics, extending from MultiPlanFromAnalyticsSpreadInfo. This class extends xpna.GlobalPlanService.MultiPlanFromAnalyticsSpreadInfo Properties
MethodsMultiPlanFromAnalyticsSpreadBasicInfoglobal MultiPlanFromAnalyticsSpreadBasicInfo() Creates a new empty MultiPlanFromAnalyticsSpreadBasicInfo. xpna.GlobalPlanService.GlobalPlanServiceExceptionglobal with sharing class GlobalPlanServiceException extends ServiceException This class is thrown when an error is detected within the xpna.GlobalPlanService class. |