# Get sub properties of Recipe parameters

**URL:** <https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325>\
**Category:** 3rd Party Modules\
**Tags:** sepasoft, scripting\
**Created:** [October 11, 2023, 10:59am UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325 "2023-10-11T10:59:54Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 11, 2023, 10:59am UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/1 "2023-10-11T10:59:54Z")

</div>

How to get these sub properties of a parameter with scripting?

I am able to get the parameters for the recipe but don't now which attribute of the MESObject contains these sub properties.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/c/b/cb8a1de01bd505a04597b7f80b4e09b4199f2c37.png)

---

<div class="post-metadata">

**Author:** ![jesse.records](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jesse.records/32/10960_2.png) [@jesse.records](https://forum.inductiveautomation.com/u/jesse.records)\
**Post date:** [October 11, 2023, 10:41pm UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/2 "2023-10-11T22:41:41Z")

</div>

It looks like you are trying to reference a Recipe-level parameter's subparameter value.

Here is a page on referencing parameters:  
[https://help.sepasoft.com/docs/display/SEPA/Referencing+Parameters+in+Batch+Recipes](https://help.sepasoft.com/docs/display/SEPA/Referencing+Parameters+in+Batch+Recipes)

Here is an example:

```auto
order = '1697062972762'

bqe = system.mes.batch.queue.getEntry(order)
lotNumber = str(system.date.toMillis(system.date.now()))
system.mes.batch.queue.setParameterValue(bqe, '/{}.Material.Lot_No', lotNumber)
print system.mes.batch.queue.getParameterValue(bqe, '/{}.Material.Auto_Create_Lot')

```

If the control recipe already exists:  
[https://help.sepasoft.com/docs/pages/viewpage.action?pageId=51119648](https://help.sepasoft.com/docs/pages/viewpage.action?pageId=51119648)  
[https://help.sepasoft.com/docs/pages/viewpage.action?pageId=51118666](https://help.sepasoft.com/docs/pages/viewpage.action?pageId=51118666)

---

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 12, 2023, 6:41am UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/4 "2023-10-12T06:41:53Z")

</div>

Okay figured it out.

```auto
filter=system.mes.object.filter.createFilter()
filter.setEnableStateName('ENABLED')
filter.setMESObjectTypeName('BatchMasterRecipeLogic')
filter.setMESObjectNamePattern('BS_Fill')
ret={}
for item in system.mes.searchMESObjects(filter):
	print "{}:{}".format(item.MESObjectTypeName,item.getName())
	
	for x in item.MESObjectLatest.parameters:
	
		if str(x.getParamKind())=='USER_LOGIC':
			
			ret[x.getFriendlyName()]={'value':str(x.getParamValueAsString()),'children':[]}
		if str(x.getParamKind())=='SUB_PARAMETER':
			parts=x.getFriendlyName().split('.')
			parent=parts[0]
			child=parts[1]
			ret[parent]['children'].append({'name':child,'value':x.getParamValueAsString()})
		

```

---

<div class="post-metadata">

**Author:** ![jesse.records](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jesse.records/32/10960_2.png) [@jesse.records](https://forum.inductiveautomation.com/u/jesse.records)\
**Post date:** [October 12, 2023, 4:23pm UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/5 "2023-10-12T16:23:23Z")

</div>

@liam1 I would recommend a lighter approach using the getBOM function.

[https://help.sepasoft.com/docs/pages/viewpage.action?pageId=91685134](https://help.sepasoft.com/docs/pages/viewpage.action?pageId=91685134)  
[https://help.sepasoft.com/docs/pages/viewpage.action?pageId=91685120](https://help.sepasoft.com/docs/pages/viewpage.action?pageId=91685120)

Here are examples of getting the BOM for both master and control recipes:

I only iterated through the recipe level params since your screenshot is showing a recipe level param. You can do the same for steps.

```auto

parentLink = system.mes.batch.recipe.getRecipeClassLink('Made To Order')
masterRecipeLink = system.mes.batch.recipe.getRecipeLink('MTO1000', parentLink)

masterRecipeBOM = system.mes.batch.recipe.getRecipeBOM(masterRecipeLink)
recipeParams = masterRecipeBOM['Parameters']
for param in recipeParams:
	print param['Name']
	if param.has_key('Entries'):
		for item in param['Entries'][0]['SubParameters']:
			print item['Name'].split('.')[1], item['Value']

batchID = 'MTO-111111'
controlRecipeBOM = system.mes.batch.queue.getBatchBOM(batchID)
controlRecipeParams = controlRecipeBOM['Parameters']

for param in controlRecipeParams:
		print param['Name']
		if param.has_key('Entries'):
			for item in param['Entries'][0]['SubParameters']:
				print item['Name'].split('.')[1], item['Value']

```

I'm not sure what you will be doing with this information but if you wanted to change a value via script, you can use the output of getBatchBOM to call setBatchBOM after modifying a value:

[https://help.sepasoft.com/docs/pages/viewpage.action?pageId=91685157](https://help.sepasoft.com/docs/pages/viewpage.action?pageId=91685157)

---

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 13, 2023, 11:09am UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/6 "2023-10-13T11:09:14Z")

</div>

Thank you for this @jesse.records , we are recreating the Batch Execution Component for custom functionality and control.

In the current implementation of the built in Batch Execution, the user is able to edit parameter values based on a selected parameter list when configuring a batch for creation.

This is the same functionality I am trying to replicate.

---

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 13, 2023, 1:57pm UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/7 "2023-10-13T13:57:04Z")

</div>

@jesse.records I have one more step to complete this component.

Just like the build-in parameter editor, I would also like to be able to update the parameter value process of creating a batch.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/b/3/b3571ff2fed8d6ee35316b3d904bd8c1537f2841.png)

I have created the the same popup and passed in the parameters values.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/d/5df8e2a5ca8249b3dc62a34b61ff7e1b204f54d4.png)

While looking through the various properties on the parameter object, I noticed the `setParamValue`.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/1/810e619d02485b1a830355b182a93f5fcbb15e49.png)  
Does this function only update the instance of the object but does not write back to the MES system to update the parameter on the system?

Do I need to:

1. Load the `BatchMasterRecipeLogic` object which contains the parameter I want to edit.
2. Edit the parameter on the `BatchMasterRecipeLogic` using the `setParamValue` function.
3. save the updated `BatchMasterRecipeLogic` object back into the MES system

Or is there a much simpler method?

---

<div class="post-metadata">

**Author:** ![jesse.records](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jesse.records/32/10960_2.png) [@jesse.records](https://forum.inductiveautomation.com/u/jesse.records)\
**Post date:** [October 13, 2023, 2:54pm UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/8 "2023-10-13T14:54:45Z")

</div>

Are you wanting to set the default parameter value of the master recipe or set the param value of the queue entry when it is being created?

---

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 13, 2023, 3:03pm UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/9 "2023-10-13T15:03:27Z")

</div>

After discussion with a team member I realized this needs to be done on a queue entry not the default master recipe which you have already described the details of.

What is the best practice for doing this considering the user has not added the batch object to the queue yet? I do the creation of the batch queue object right at the end of the process.

---

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 16, 2023, 10:56am UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/11 "2023-10-16T10:56:16Z")

</div>

I tried this method , but got an error which required the batch to be running in order to update the parameters.

So I am trying the second method of updating the bom on batch queue entry:

```auto
updateParameters={"MaterialName":"test","Material.Target_Quantity":1.0}
bom=system.mes.batch.queue.getBatchBOM('STU_01_11_01_1697447067410_BS_Fill')
print system.util.jsonEncode(bom,4)
for params in bom["Parameters"]:
	parent=params["Name"]
	if params.has_key('Entries'):
		for subparam in params['Entries'][0]['SubParameters']:
			if subparam['Name'] in updateParameters.keys():
				subparam['Value']=updateParameters[subparam['Name']]
		pass
	else:
		if updateParameters.has_key(parent):
			params['Value']=updateParameters[parent]
'---*'*10		
print system.util.jsonEncode(bom,4)
system.mes.batch.queue.setBatchBOM(batchQueueEntry, bom)
batchQueueEntry=system.mes.batch.queue.getBatchBOM('STU_01_11_01_1697447067410_BS_Fill')

```

I'm getting this error even though I providing the bqe as the first argument.

```auto
Traceback (most recent call last):
  File "<input>", line 26, in <module>
	at com.inductiveautomation.ignition.common.TypeUtilities.coerce(TypeUtilities.java:1548)

	at com.inductiveautomation.ignition.common.script.builtin.PyArgumentMap.coerce(PyArgumentMap.java:130)

	at com.inductiveautomation.ignition.common.script.builtin.PyArgumentMap.interpretPyArgs(PyArgumentMap.java:82)

	at com.inductiveautomation.ignition.common.script.builtin.PyArgumentMap.interpretPyArgs(PyArgumentMap.java:40)

	at com.sepasoft.production.script.BatchClientQueueScript.setBatchBOM(BatchClientQueueScript.java:317)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

java.lang.ClassCastException: java.lang.ClassCastException: Cannot coerce value '{u'Steps': [{u'Type': u'Unit Procedure', u'Phase': u'Unit Procedure', u'Step': u'Fill', u'Sublogic': {u'Steps': [{u'Type': u'Equipment Phase', u'Phase': u'Fill', u'Parameters': [{u'Value': False, u'DataType': u'BOOLEAN', u'Name': u'Interlocked'}, {u'Value': u'', u'DataType': u'STRING', u'Name': u'MaterialCode'}, {u'Value': u'', u'DataType': u'STRING', u'Name': u'MaterialName'}, {u'Value': None, u'MinValue': -3.4028234663852886e+38, u'DataType': u'FLOAT', u'MaxValue': 3.4028234663852886e+38, u'Name': u'ReqQty'}, {u'Value': None, u'MinValue': -2147483648, u'DataType': u'INTEGER', u'MaxValue': 2147483647, u'Name': u'SourceEq'}, {u'Value': u'EP_Fill', u'MinValue': u'-2147483648', u'DataType': u'ENUM', u'MaxValue': u'2147483647', u'Name': u'Task'}], u'Step': u'UP2'}], u'Parameters': [{u'Value': False, u'DataType': u'BOOLEAN', u'Name': u'ColourCorrect'}, {u'Value': u'', u'DataType': u'STRING', u'Name': u'MaterialCode'}, {u'Entries': [{u'SubParameters': [{u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Lot_Manifest'}, {u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Material_Name'}, {u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Material_Class'}, {u'Value': u'Invalid parameter value.', u'DataType': u'String', u'Name': u'MaterialIn.Lot_Status'}, {u'Value': u'Invalid parameter value.', u'DataType': u'String', u'Name': u'MaterialIn.Material_UOM'}, {u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Lot_Manifest_Class'}, {u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Lot_Equipment'}, {u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Lot_Equipment_Class'}, {u'Value': 0, u'MinValue': -2147483648, u'DataType': u'Int4', u'MaxValue': 2147483647, u'Name': u'MaterialIn.Alternate_Priority'}, {u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Lot_No'}, {u'Value': None, u'DataType': u'String', u'Name': u'MaterialIn.Alternate_Group'}, {u'Value': 0.0, u'MinValue': -1.7976931348623157e+308, u'DataType': u'Float8', u'MaxValue': 1.7976931348623157e+308, u'Name': u'MaterialIn.Target_Quantity'}, {u'Value': 0.0, u'MinValue': -1.7976931348623157e+308, u'DataType': u'Float8', u'MaxValue': 1.7976931348623157e+308, u'Name': u'MaterialIn.Actual_Quantity'}]}], u'Name': u'MaterialIn'}, {u'Value': u'', u'DataType': u'STRING', u'Name': u'MaterialName'}, {u'Value': False, u'DataType': u'BOOLEAN', u'Name': u'Pasteurizing'}, {u'Value': None, u'MinValue': -3.4028234663852886e+38, u'DataType': u'FLOAT', u'MaxValue': 3.4028234663852886e+38, u'Name': u'ReqQty'}, {u'Value': u'Tanker 1', u'DataType': u'ENUM', u'Name': u'SourceEq'}, {u'Value': u'EP_Fill', u'DataType': u'ENUM', u'Name': u'Task'}], u'LogicType': u'Unit Procedure', u'Name': u'Fill'}}], u'Parameters': [{u'Value': u'', u'DataType': u'STRING', u'Name': u'ActualQty'}, {u'Entries': [{u'SubParameters': [{u'Value': u'Invalid parameter value.', u'DataType': u'String', u'Name': u'Material.Material_UOM'}, {u'Value': None, u'DataType': u'String', u'Name': u'Material.Lot_Manifest_Class'}, {u'Value': u'Production', u'DataType': u'String', u'Name': u'Material.Material_Class'}, {u'Value': None, u'DataType': u'String', u'Name': u'Material.Alternate_Group'}, {u'Value': None, u'DataType': u'String', u'Name': u'Material.Lot_Equipment'}, {u'Value': 0.0, u'MinValue': -1.7976931348623157e+308, u'DataType': u'Float8', u'MaxValue': 1.7976931348623157e+308, u'Name': u'Material.Actual_Quantity'}, {u'Value': None, u'DataType': u'String', u'Name': u'Material.Lot_No'}, {u'Value': u'Invalid parameter value.', u'DataType': u'String', u'Name': u'Material.Lot_Status'}, {u'Value': u'2_01266_012 - Natural Flavouring (Pineapple)-KAN-25KG', u'DataType': u'String', u'Name': u'Material.Material_Name'}, {u'Value': None, u'DataType': u'String', u'Name': u'Material.Lot_Manifest'}, {u'Value': None, u'DataType': u'String', u'Name': u'Material.Lot_Equipment_Class'}, {u'Value': 0.0, u'MinValue': -1.7976931348623157e+308, u'DataType': u'Float8', u'MaxValue': 1.7976931348623157e+308, u'Name': u'Material.Target_Quantity'}, {u'Value': 0, u'MinValue': -2147483648, u'DataType': u'Int4', u'MaxValue': 2147483647, u'Name': u'Material.Alternate_Priority'}]}], u'Name': u'Material'}, {u'Value': u'', u'DataType': u'STRING', u'Name': u'MaterialName'}, {u'Value': u'Tanker 1', u'DataType': u'ENUM', u'Name': u'SourceEq'}], u'LogicType': u'Procedure', u'Name': u'BS_Fill'}' into type: class com.sepasoft.production.gateway.manager.misc.BatchQueueEntry

```

---

<div class="post-metadata">

**Author:** ![jesse.records](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jesse.records/32/10960_2.png) [@jesse.records](https://forum.inductiveautomation.com/u/jesse.records)\
**Post date:** [October 16, 2023, 3:12pm UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/12 "2023-10-16T15:12:46Z")

</div>

@liam1 I'm not sure from this snippet where batchQueueEntry was first declared.

If it is not until the end, you may need to move this up a line.

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/1/3/1322cfdb9049f832e6cfb3b516ab2e81045c58a9.png)

---

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 17, 2023, 5:53am UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/13 "2023-10-17T05:53:49Z")

</div>

Thanks for pointing that out.  
I got a new error. Which I tried to resolve by setting `Invalid parameter value` to `None`.

The issue is, even if you call `getBatchBOM`, make not changes to the object and then use `setBatchBOM` it still gives and error.

This Error doesn't appear in the normal recipe editor on a validated recipe?

```auto
updateParameters={"MaterialName":"test","Material.Target_Quantity":1.0}
bom=system.mes.batch.queue.getBatchBOM('STU_01_11_01_1697459467689_BS_Fill')
print system.util.jsonEncode(bom,4)
for params in bom['Parameters']:
	parent=params['Name']
	if params.has_key('Entries'):
		for subparam in params['Entries'][0]['SubParameters']:
			if subparam['Name'] in updateParameters.keys():
				subparam['Value']=updateParameters[subparam['Name']]
			if subparam['Value']=="Invalid parameter value.":
				subparam['Value']=None
		
	else:
		if updateParameters.has_key(parent):
			params['Value']=updateParameters[parent]
		if params['Value']=="Invalid parameter value.":
			params['Value']=None

		
'After Edit*'*10		
print system.util.jsonEncode(bom,4)
batchQueueEntry=system.mes.batch.queue.getEntry('STU_01_11_01_1697459467689_BS_Fill')

system.mes.batch.queue.setBatchBOM(batchQueueEntry, bom)

```

```auto
inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Enum (Lot_Status) option with name (Invalid parameter value.) not found

```

```auto
{
    "LogicType": "Procedure",
    "Name": "BS_Fill",
    "Parameters": [
        {
            "DataType": "STRING",
            "Name": "ActualQty",
            "Value": ""
        },
        {
            "Entries": [{"SubParameters": [
                {
                    "DataType": "Float8",
                    "MaxValue": 1.7976931348623157E308,
                    "MinValue": -1.7976931348623157E308,
                    "Name": "Material.Target_Quantity",
                    "Value": 1.0
                },
                {
                    "DataType": "String",
                    "Name": "Material.Lot_Status",
                    "Value": "Complete"
                },
                {
                    "DataType": "String",
                    "Name": "Material.Material_Class",
                    "Value": "Production"
                },
                {
                    "DataType": "Float8",
                    "MaxValue": 1.7976931348623157E308,
                    "MinValue": -1.7976931348623157E308,
                    "Name": "Material.Actual_Quantity",
                    "Value": 0.0
                },
                {
                    "DataType": "String",
                    "Name": "Material.Lot_No",
                    "Value": null
                },
                {
                    "DataType": "Int4",
                    "MaxValue": 2147483647,
                    "MinValue": -2147483648,
                    "Name": "Material.Alternate_Priority",
                    "Value": 0
                },
                {
                    "DataType": "String",
                    "Name": "Material.Lot_Equipment",
                    "Value": null
                },
                {
                    "DataType": "String",
                    "Name": "Material.Alternate_Group",
                    "Value": null
                },
                {
                    "DataType": "String",
                    "Name": "Material.Material_UOM",
                    "Value": "L"
                },
                {
                    "DataType": "String",
                    "Name": "Material.Material_Name",
                    "Value": "2_01266_012 - Natural Flavouring (Pineapple)-KAN-25KG"
                },
                {
                    "DataType": "String",
                    "Name": "Material.Lot_Manifest",
                    "Value": null
                },
                {
                    "DataType": "String",
                    "Name": "Material.Lot_Manifest_Class",
                    "Value": null
                },
                {
                    "DataType": "String",
                    "Name": "Material.Lot_Equipment_Class",
                    "Value": null
                }
            ]}],
            "Name": "Material"
        },
        {
            "DataType": "STRING",
            "Name": "MaterialName",
            "Value": "test"
        },
        {
            "DataType": "ENUM",
            "Name": "SourceEq",
            "Value": "Tanker 1"
        }
    ],
    "Steps": [{
        "Phase": "Unit Procedure",
        "Step": "Fill",
        "Sublogic": {
            "LogicType": "Unit Procedure",
            "Name": "Fill",
            "Parameters": [
                {
                    "DataType": "BOOLEAN",
                    "Name": "ColourCorrect",
                    "Value": false
                },
                {
                    "DataType": "STRING",
                    "Name": "MaterialCode",
                    "Value": ""
                },
                {
                    "Entries": [{"SubParameters": [
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Lot_Status",
                            "Value": "Invalid parameter value."
                        },
                        {
                            "DataType": "Float8",
                            "MaxValue": 1.7976931348623157E308,
                            "MinValue": -1.7976931348623157E308,
                            "Name": "MaterialIn.Actual_Quantity",
                            "Value": 0.0
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Material_Name",
                            "Value": null
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Lot_Manifest_Class",
                            "Value": null
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Lot_Equipment",
                            "Value": null
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Lot_No",
                            "Value": null
                        },
                        {
                            "DataType": "Int4",
                            "MaxValue": 2147483647,
                            "MinValue": -2147483648,
                            "Name": "MaterialIn.Alternate_Priority",
                            "Value": 0
                        },
                        {
                            "DataType": "Float8",
                            "MaxValue": 1.7976931348623157E308,
                            "MinValue": -1.7976931348623157E308,
                            "Name": "MaterialIn.Target_Quantity",
                            "Value": 0.0
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Alternate_Group",
                            "Value": null
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Lot_Manifest",
                            "Value": null
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Lot_Equipment_Class",
                            "Value": null
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Material_Class",
                            "Value": null
                        },
                        {
                            "DataType": "String",
                            "Name": "MaterialIn.Material_UOM",
                            "Value": "Invalid parameter value."
                        }
                    ]}],
                    "Name": "MaterialIn"
                },
                {
                    "DataType": "STRING",
                    "Name": "MaterialName",
                    "Value": ""
                },
                {
                    "DataType": "BOOLEAN",
                    "Name": "Pasteurizing",
                    "Value": false
                },
                {
                    "DataType": "FLOAT",
                    "MaxValue": 3.4028234663852886E38,
                    "MinValue": -3.4028234663852886E38,
                    "Name": "ReqQty",
                    "Value": null
                },
                {
                    "DataType": "ENUM",
                    "Name": "SourceEq",
                    "Value": "Tanker 1"
                },
                {
                    "DataType": "ENUM",
                    "Name": "Task",
                    "Value": "EP_Fill"
                }
            ],
            "Steps": [{
                "Parameters": [
                    {
                        "DataType": "BOOLEAN",
                        "Name": "Interlocked",
                        "Value": false
                    },
                    {
                        "DataType": "STRING",
                        "Name": "MaterialCode",
                        "Value": ""
                    },
                    {
                        "DataType": "STRING",
                        "Name": "MaterialName",
                        "Value": ""
                    },
                    {
                        "DataType": "FLOAT",
                        "MaxValue": 3.4028234663852886E38,
                        "MinValue": -3.4028234663852886E38,
                        "Name": "ReqQty",
                        "Value": null
                    },
                    {
                        "DataType": "INTEGER",
                        "MaxValue": 2147483647,
                        "MinValue": -2147483648,
                        "Name": "SourceEq",
                        "Value": null
                    },
                    {
                        "DataType": "ENUM",
                        "MaxValue": "2147483647",
                        "MinValue": "-2147483648",
                        "Name": "Task",
                        "Value": "EP_Fill"
                    }
                ],
                "Phase": "Fill",
                "Step": "UP2",
                "Type": "Equipment Phase"
            }]
        },
        "Type": "Unit Procedure"
    }]
}

```

---

<div class="post-metadata">

**Author:** ![liam1](https://avatars.discourse-cdn.com/v4/letter/l/e68b1a/32.png) [@liam1](https://forum.inductiveautomation.com/u/liam1)\
**Post date:** [October 17, 2023, 6:31am UTC](https://forum.inductiveautomation.com/t/get-sub-properties-of-recipe-parameters/80325/14 "2023-10-17T06:31:14Z")

</div>

After fixing the ENUM issue, this is the next error I get. Is there anyway to only make changes to parts of the BOM instead of the whole BOM?

```auto
com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Cannot set value for param (Task) because the value (EP_Fill) is greater than the parameter's defined maximum value (2147483647).

```
