Dear community members,
I am using a Drop down widget for the user to select a list of values. Here is my HTML code snippet for the same:
<fieldset>
<div class="leftCon">
<label>XMSG("Select Hashing algorithm")</label>
<ayx
data-ui-props = "{type: 'DropDown', widgetId: 'HashAlgos'}"
data-item-props = "{dataName: 'HashingField'}"
>
</ayx>
</div>
</fieldset>
Further I defined the label and values down below in the script and binded the widget.
<script type="text/javascript">
Alteryx.Gui.BeforeLoad = (manager, AlteryxDataItems, json) => {
// Drop Down for selecting Hashing algorithm
var stringSelector = new AlteryxDataItems.StringSelector("HashingField", {
optionList: [
{label: "MD5", value: "md5"},
{label: "SHA1", value: "sha1"},
//{label: "CRC32", value: "crc32"},
{label: "SHA256", value: "sha256"},
{label: "SHA512", value: "sha512"}
]
})
manager.addDataItem(stringSelector)
manager.bindDataItemToWidget(stringSelector, "HashAlgos")
}
Alteryx.Gui.AfterLoad = (manager) => {
}
</script>
In AyxPlugin class,
class AyxPlugin:
def __init__(self, n_tool_id: int, alteryx_engine: object, output_anchor_mgr: object):
# Default properties
self.n_tool_id: int = n_tool_id
self.alteryx_engine: Sdk.AlteryxEngine = alteryx_engine
self.output_anchor_mgr: Sdk.OutputAnchorManager = output_anchor_mgr
self.label = "Encoded Signature Generator Tool (" + str(n_tool_id) + ")"
# Custom properties
self.HashingField: str = ''
self.Output: Sdk.OutputAnchor = None
def pi_init(self, str_xml: str):
xml_parser = Et.fromstring(str_xml)
self.HashingField = xml_parser.find('HashingField').text if 'HashingField' in str_xml else ''
if self.HashingField == '':
self.display_error_msg('Key and Secret or Hashing algorithm or both parameters were not provided.')
# Getting the output anchor from Config.xml by the output connection name
self.Output = self.output_anchor_mgr.get_output_anchor('Output')
In Incoming Interface class:
class IncomingInterface:
def __init__(self, parent: AyxPlugin):
# Default properties
self.parent: AyxPlugin = parent
# Custom properties
self.InInfo: Sdk.RecordInfo = None
self.HField: Sdk.Field = None
self.OutInfo: Sdk.RecordInfo = None
self.SignatureField: Sdk.Field = None
self.Creator: Sdk.RecordCreator = None
self.Copier: Sdk.RecordCopier = None
def ii_init(self, record_info_in: Sdk.RecordInfo) -> bool:
self.InInfo = record_info_in
self.HField = self.InInfo.get_field_by_name(self.parent.HashingField)
self.OutInfo = self.InInfo.clone()
self.SignatureField = self.OutInfo.add_field('Signature', Sdk.FieldType.string, size=1000, source=self.parent.label)
self.Creator = self.OutInfo.construct_record_creator()
self.Copier = Sdk.RecordCopier(self.OutInfo, self.InInfo)
index = 0
while index < self.InInfo.num_fields:
self.Copier.add(index, index)
index += 1
self.Copier.done_adding()
self.parent.Output.init(self.OutInfo)
return True
def ii_push_record(self, in_record: Sdk.RecordRef) -> bool:
Hash = self.HField.get_as_string(in_record)
Signature = Hash
self.SignatureField.set_from_string(self.Creator, Signature)
self.Creator.reset()
self.Copier.copy(self.Creator, in_record)
out_record = self.Creator.finalize_record()
self.parent.Output.push_record(out_record)
return True
I do not get the values of 'Hash' as selected by the user from the drop down. Can anyone point to me what mistake I am doing? I would really appreciate if someone can correct me. I want the value of Hash = value selected by the user from the dropdown list.
Hi @amitupadhyay, I created a quick mock-up using your code snippets and I was able to retrieve the value of the drop-down. What do you get if you are not getting the hash values? What is the XML string being sent to the Python code?
In my code I'm sending a message to the engine with the XML received and the value of HashingField. I got both values as expected:
Thank you for responding. I was getting the hash values as Field Names. However, I solved the problem. In the incoming interface where I have declared a separate field for hashing algorithm value was a wrong step. Instead, I called the hashing value from the Alteryx Plugin class as parent.HashingField and it worked.