Skip to main content
Question

Search-powered trigger

  • July 12, 2023
  • 1 reply
  • 18 views

Forum|alt.badge.img+1

I’m trying to create a trigger that can be search, in this case it’s for employees.

I created a simple trigger (find_employee_by_name):

const perform = async (z, bundle) => {

    return [
        { id: '507d7a07-9c5f-4d36-8280-aa4651c65977', name: 'Jane Doe' },
        { id: 'c960fa85-ce80-448b-bd8f-392df5715f45', name: 'Mike Canine' }
    ];

};

module.exports = {
    operation: {
      perform: perform,
      outputFields: [
            { key: 'id', type: 'string' },
            { key: 'name', type: 'string' },
        ],
    },
    display: {
        description: 'Find an employee by his or her name.',
        hidden: true,
        label: 'Find Employees',
    },
    key: 'find_employee_by_name',
    noun: 'Employee',
};

then referenced it in a create:

const perform = async (z, bundle) => {
//  omitted for brevity
};

module.exports = {
    display: {
        description: "lorem ipsum.",
        hidden: false,
        label: 'lorem ipsum',
    },
    key: 'update_employee',
    noun: 'Employee',
    operation: {
        perform: perform,
        inputFields: [
            {
                key: 'EmployeeId',
                label: 'Employee Id',
                required: true,
                list: false,
                altersDynamicFields: false,
                helpText: 'Id of the employee',
            },
            {
                key: 'ManagerId',
                label: "Manager",
                required: false,
                type: 'string',
                dynamic: 'find_employee_by_name.id.name',
                search: 'find_employee_by_name.name',
                list: false,
                altersDynamicFields: false,
                helpText: "The employee's manager."
            },
        ],
        outputFields: [
            { key: 'id' },
            { key: 'url' },
        ],
    },
};

In the index.js file, I reference the trigger:

...
const findEmployeeByNameTrigger = require('./triggers/find_employee_by_name.js');
...

module.exports = {
  version: require('./package.json').version,
  platformVersion: require('zapier-platform-core').version,
  ...
  triggers: {
    ...
    [findEmployeeByNameTrigger.key]: findEmployeeByNameTrigger,
    ...
  },
  authentication: authentication,
};

When I validate the script I get an error:

creates.update_employee_position_status  field "ManagerId" connects to search "find_employee_by_name", which doesn't exist (D013)

 

What am I missing?

Did this topic help you find an answer to your question?
This post has been closed for comments. Please create a new post if you need help or have a question about this topic.

1 reply

Forum|alt.badge.img+7
  • Zapier Staff
  • 91 replies
  • July 12, 2023

Hey @benjamink9 ,

Based on that error message, it sounds like the validation runner was unable to find a search with the key find_employee_by_name

I see findEmployeeByNameTrigger is registered as a trigger in index.js, but is it also registered as a search there?

If not, it might help to try registering it under searches as well.

  searches: {
    [search.key]: search
  },

To be fully transparent, without testing, I’m not sure if a single operation will be valid in both places, as a trigger and a search, but the above might help get past that initial error to see.