{"action":"created","issue":{"url":"https://api.github.com/repos/SparkDevNetwork/Rock/issues/2912","repository_url":"https://api.github.com/repos/SparkDevNetwork/Rock","labels_url":"https://api.github.com/repos/SparkDevNetwork/Rock/issues/2912/labels{/name}","comments_url":"https://api.github.com/repos/SparkDevNetwork/Rock/issues/2912/comments","events_url":"https://api.github.com/repos/SparkDevNetwork/Rock/issues/2912/events","html_url":"https://github.com/SparkDevNetwork/Rock/issues/2912","id":309164878,"number":2912,"title":"New Workflow Action: Entity Properties Set","user":{"login":"cabal95","id":1119863,"avatar_url":"https://avatars3.githubusercontent.com/u/1119863?v=4","gravatar_id":"","url":"https://api.github.com/users/cabal95","html_url":"https://github.com/cabal95","followers_url":"https://api.github.com/users/cabal95/followers","following_url":"https://api.github.com/users/cabal95/following{/other_user}","gists_url":"https://api.github.com/users/cabal95/gists{/gist_id}","starred_url":"https://api.github.com/users/cabal95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cabal95/subscriptions","organizations_url":"https://api.github.com/users/cabal95/orgs","repos_url":"https://api.github.com/users/cabal95/repos","events_url":"https://api.github.com/users/cabal95/events{/privacy}","received_events_url":"https://api.github.com/users/cabal95/received_events","type":"User","site_admin":false},"labels":[{"id":687473775,"url":"https://api.github.com/repos/SparkDevNetwork/Rock/labels/Priority:%20Low","name":"Priority: Low","color":"2492a5","default":false},{"id":252085129,"url":"https://api.github.com/repos/SparkDevNetwork/Rock/labels/Status:%20Available","name":"Status: Available","color":"91ca55","default":false},{"id":81090682,"url":"https://api.github.com/repos/SparkDevNetwork/Rock/labels/Status:%20Confirmed","name":"Status: Confirmed","color":"91ca55","default":false},{"id":687655609,"url":"https://api.github.com/repos/SparkDevNetwork/Rock/labels/Topic:%20Workflows","name":"Topic: Workflows","color":"FFC274","default":false},{"id":81090315,"url":"https://api.github.com/repos/SparkDevNetwork/Rock/labels/Type:%20Enhancement","name":"Type: Enhancement","color":"5EBEFF","default":false}],"state":"open","locked":false,"assignee":{"login":"cabal95","id":1119863,"avatar_url":"https://avatars3.githubusercontent.com/u/1119863?v=4","gravatar_id":"","url":"https://api.github.com/users/cabal95","html_url":"https://github.com/cabal95","followers_url":"https://api.github.com/users/cabal95/followers","following_url":"https://api.github.com/users/cabal95/following{/other_user}","gists_url":"https://api.github.com/users/cabal95/gists{/gist_id}","starred_url":"https://api.github.com/users/cabal95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cabal95/subscriptions","organizations_url":"https://api.github.com/users/cabal95/orgs","repos_url":"https://api.github.com/users/cabal95/repos","events_url":"https://api.github.com/users/cabal95/events{/privacy}","received_events_url":"https://api.github.com/users/cabal95/received_events","type":"User","site_admin":false},"assignees":[{"login":"cabal95","id":1119863,"avatar_url":"https://avatars3.githubusercontent.com/u/1119863?v=4","gravatar_id":"","url":"https://api.github.com/users/cabal95","html_url":"https://github.com/cabal95","followers_url":"https://api.github.com/users/cabal95/followers","following_url":"https://api.github.com/users/cabal95/following{/other_user}","gists_url":"https://api.github.com/users/cabal95/gists{/gist_id}","starred_url":"https://api.github.com/users/cabal95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cabal95/subscriptions","organizations_url":"https://api.github.com/users/cabal95/orgs","repos_url":"https://api.github.com/users/cabal95/repos","events_url":"https://api.github.com/users/cabal95/events{/privacy}","received_events_url":"https://api.github.com/users/cabal95/received_events","type":"User","site_admin":false}],"milestone":null,"comments":3,"created_at":"2018-03-27T23:07:40Z","updated_at":"2018-03-29T23:28:50Z","closed_at":null,"author_association":"MEMBER","body":"### Prerequisites\r\n* [X] Put an X between the brackets on this line if you have done all of the following:\r\n    * Can you reproduce the problem on a fresh install or the [demo site](http://rock.rocksolidchurchdemo.com/)?\r\n    * Did you include your Rock version number and [client culture](https://github.com/SparkDevNetwork/Rock/wiki/Environment-and-Diagnostics-Information) setting?\r\n    * Did you [perform a cursory search](https://github.com/issues?q=is%3Aissue+user%3ASparkDevNetwork+-repo%3ASparkDevNetwork%2FSlack) to see if your bug or enhancement is already reported?\r\n\r\n### Description\r\n\r\nThis was originally discussed on Slack, moving here to keep better track of it for historical purposes with the upcoming pull request.\r\n\r\nThis workflow action exists now as a plugin but will be moved into core, probably in v8.0. You can specify the Entity Type whose properties will be updated. You can then specify the \"Entity\" itself by either Guid or Id value. This functions nearly the same as the `Entity Property Set` except that it allows you to set multiple attributes at once.\r\n\r\nThe primary difference between the two, beyond the fact that this can set multiple properties at the same time, is that this action can also _create_ new entities in the database. If the \"Existing Entity\" is left blank, then a new entity will be created and it's Id/Guid stored in the \"Entity Attribute\" output attribute.\r\n\r\n@Tschrock You wrote the original single-property implementation. Can you give me some insight on the use case to the null value handling option? I can sort of see the use of the `Ignore` option (though that could be done by an action filter), but I'm not understanding the use case for the for `Set To Empty` vs `Set To Null`. The only time I can see that mattering is if you are setting a string property and you specifically want to set it as null instead of an empty string. And the way most Rock string checks, there is no distinction between the two.\r\n\r\nI'm trying to decide if it needs to be implemented as I don't currently implement anything like that. It's just automatic. If the property is of type string then it gets a blank string set. If it's any other type (say int) and nullable, then it gets a null value set. If it's a non-nullable property and non-string, then an error is logged and the action fails.\r\n\r\n![image](https://user-images.githubusercontent.com/1119863/37999585-5f41550c-31d8-11e8-90a8-28f6216773a8.png)\r\n\r\n> Note: The screenshot uses a custom Key Value List field type which would not be included. This is why the width is 100% instead of the standard smaller width of a normal Key Value List field.\r\n\r\n### Versions\r\n\r\n* **Rock Version:** 8.0?\r\n* **Client Culture Setting:** en-US\r\n"},"comment":{"url":"https://api.github.com/repos/SparkDevNetwork/Rock/issues/comments/377402810","html_url":"https://github.com/SparkDevNetwork/Rock/issues/2912#issuecomment-377402810","issue_url":"https://api.github.com/repos/SparkDevNetwork/Rock/issues/2912","id":377402810,"user":{"login":"edmistj","id":548178,"avatar_url":"https://avatars3.githubusercontent.com/u/548178?v=4","gravatar_id":"","url":"https://api.github.com/users/edmistj","html_url":"https://github.com/edmistj","followers_url":"https://api.github.com/users/edmistj/followers","following_url":"https://api.github.com/users/edmistj/following{/other_user}","gists_url":"https://api.github.com/users/edmistj/gists{/gist_id}","starred_url":"https://api.github.com/users/edmistj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edmistj/subscriptions","organizations_url":"https://api.github.com/users/edmistj/orgs","repos_url":"https://api.github.com/users/edmistj/repos","events_url":"https://api.github.com/users/edmistj/events{/privacy}","received_events_url":"https://api.github.com/users/edmistj/received_events","type":"User","site_admin":false},"created_at":"2018-03-29T23:28:50Z","updated_at":"2018-03-29T23:28:50Z","author_association":"OWNER","body":"Sounds good."}}
{"actor":{"display_login":"edmistj"}}