Great!  Is our gut feeling that the same is true also in other cases in
which WSO2 products benefit from BPS (e.g. ES)?  That would be good
progress :-)


Best regards,
Frank

2015-07-20 6:15 GMT+02:00 Chathura Ekanayake <chath...@wso2.com>:

> Hi Frank,
>
>
> ​This does not solve the problem of missing data: your selection may skip
>> steps that produce data required by the selected steps.
>>
>
> As discussed with Prabath and IS team, human tasks involved in these
> workflows have the same input and output data. Input data is provided at
> process instance creation (e.g. details of a new user) and output data is
> whether the request is approved or not. Therefore, I think we assume that
> tasks do not depend on outputs of other tasks.
>
> Regards,
> Chathura
>
>>
>>
>> 2015-07-16 8:49 GMT+02:00 Chathura Ekanayake <chath...@wso2.com>:
>>
>>> From the implementation point of view, the BPEL workflow executor should
>>> read the workflow template (which may be stored in the registry) and attach
>>> template details to BPEL invocation request. So that the BPEL request
>>> message will look like below:
>>>
>>> <body>
>>>    <addUserWorkflowRequest>
>>>       <template>
>>>          <step>
>>>             <name>step1</name>
>>>             <assignment>...</assignment>
>>>          </step>
>>>          <step>
>>>             <name>step2</name>
>>>             <assignment>...</assignment>
>>>          </step>
>>>       </template>
>>>
>>>       <userData>
>>>          <username>smith</username>
>>>          <password>smithpass</password>
>>>          <roles>
>>>                <role>manager</role>
>>>                <role>inventoryStaff</role>
>>>          </roles>
>>>       </userData>
>>>    </addUserWorkflowRequest>
>>> </body>
>>>
>>> BPEL workflow decides which tasks to execute by examining the
>>> template/step/name part and assigns users to corresponding tasks using the
>>> template/step/assignment part. <userData> element contains the actual
>>> payload of the request, which may be used by human tasks to display
>>> information about the user being added.
>>>
>>> Regards,
>>> Chathura
>>>
>>> On Thu, Jul 16, 2015 at 12:00 PM, Chathura Ekanayake <chath...@wso2.com>
>>> wrote:
>>>
>>>> I think we can clarify this further by looking in to user stories. I
>>>> think the user experience of using IS workflows should be something like
>>>> this:
>>>>
>>>> Scenario A - Associating a workflow with an action (e.g. Add user
>>>> action):
>>>> 1) Select the "Add user" attachment point from the list of published
>>>> attachment points
>>>> 2) Select a workflow from the list of registered workflows
>>>> 3) Once selected, the selected workflow can be configured to create a
>>>> template (as described in 4 and 5)
>>>> 4) User is presented with all available tasks (i.e. steps) in the
>>>> selected workflow
>>>> 5) User can exclude certain tasks and assign users/roles to remaining
>>>> tasks
>>>> 6) User can specify an activation condition for the workflow
>>>>
>>>> Scenario B - Performing an action which has an associated workflow
>>>> (e.g. Adding a user):
>>>> 1) User fills in the add user form and click "Finish"
>>>> 2) The associated workflow is triggered and relevant users performs
>>>> tasks assigned to them using the BPS human task webapp
>>>> 3) Once the workflow completes, it returns the approval status and IS
>>>> decides whether to add the user based on the status
>>>>
>>>> Scenario C - Registering a workflow:
>>>> 1) Deploy the required BPEL archive in BPS
>>>> 2) Provide the URL of the BPEL endpoint as a configuration
>>>> 3) Specify the list of configurable tasks (this is used for creating
>>>> templates)
>>>>
>>>> Below are some questions:
>>>>
>>>> Scenario A:
>>>> Can we specify multiple workflows for the same action?
>>>> Do workflows always return a boolean value (i.e. approved / not
>>>> approved)?
>>>>
>>>> Scenario B:
>>>> Are we expecting the users to complete tasks (e.g. approval steps)
>>>> using the BPS Human Task web app? Or are we providing an integrated human
>>>> task UI in the IS management console?
>>>>
>>>> Scenario C:
>>>> Are there any other steps involved in this?
>>>> The list of tasks can also be extracted from the BPEL by locating
>>>> b4p:peopleActivity elements. Then the user can remove certain tasks from
>>>> the configurable tasks list, if those are mandatory.
>>>>
>>>> Regards,
>>>> Chathura
>>>>
>>>>
>>>>
>>>> On Wed, Jul 15, 2015 at 9:40 PM, Prabath Siriwardena <prab...@wso2.com>
>>>> wrote:
>>>>
>>>>> Thanks Frank for the suggestion. Yes - it would be great if we can
>>>>> make the template generation easy. At the moment as we discussed with
>>>>> Chathura, we are creating a parameterized BPEL workflow and  parameters 
>>>>> are
>>>>> picked from the user through the template (in IS). So the same BPEL
>>>>> workflow will find different execution paths based on the template...
>>>>>
>>>>> Thanks & regards,
>>>>> -Prabath
>>>>>
>>>>>
>>>>> On Wed, Jul 15, 2015 at 6:02 AM, Frank Leymann <fr...@wso2.com> wrote:
>>>>>
>>>>>> As Chathura describes, "workflow templates" are not easy to design.
>>>>>> This is why we discussed some months ago a "specialized language" to 
>>>>>> ensure
>>>>>> that template design is easy.  Another alternative is to consider CMMN
>>>>>> which has been designed to make "skipping" more easy...  Maybe that's
>>>>>> another subject to be discussed when we meet early August in Colombo?
>>>>>>
>>>>>>
>>>>>> Best regards,
>>>>>> Frank
>>>>>>
>>>>>> 2015-07-15 6:31 GMT+02:00 Chathura Ekanayake <chath...@wso2.com>:
>>>>>>
>>>>>>> According to the discussion we had last week, I think the users
>>>>>>> assigned to tasks (e.g. approvers) as well as workflow steps have to be
>>>>>>> configurable. That means, we can give a workflow covering many steps. 
>>>>>>> Then
>>>>>>> steps required for a particular scenario (and users/roles for those 
>>>>>>> steps)
>>>>>>> can be selected based on the configuration (i.e. workflow template).
>>>>>>>
>>>>>>> For example a workflow (workflow A) can be:
>>>>>>>
>>>>>>> Step1 -> Step2 -> Step3 -> Step4
>>>>>>>
>>>>>>> And a workflow template (for workflow A) can be:
>>>>>>> Step1 : role1 OR user2
>>>>>>> Step3 : role2
>>>>>>>
>>>>>>> Above template triggers the workflow A by skipping tasks Step2 and
>>>>>>> Step4. Therefore, a concrete workflow can support any template that
>>>>>>> contains subset of its tasks. Then there is a problem if a workflow
>>>>>>> contains conditional branches (i.e. if branches / OR gateways). In that
>>>>>>> case, certain branches may not contain tasks specified in a template.
>>>>>>> Therefore, what a template states is the tasks that can possibly 
>>>>>>> execute.
>>>>>>>
>>>>>>> The next problem is whether tasks have dependencies on other tasks
>>>>>>> (e.g. output variables of task A can be consumed by task B). In that 
>>>>>>> case
>>>>>>> if task A is skipped workflow may fail. Therefore, either we have to 
>>>>>>> design
>>>>>>> workflows without having any dependencies among tasks or we should 
>>>>>>> support
>>>>>>> restrictions on workflow templates (e.g. if task B is included then 
>>>>>>> task A
>>>>>>> has to be included).
>>>>>>>
>>>>>>> Regards,
>>>>>>> Chathura
>>>>>>>
>>>>>>> On Wed, Jul 15, 2015 at 1:42 AM, Prabath Siriwardena <
>>>>>>> prab...@wso2.com> wrote:
>>>>>>>
>>>>>>>> BTW yes - lets have a discussion on this again - because this is
>>>>>>>> not just IS thing - and can be used by any other product which needs to
>>>>>>>> have workflow support..
>>>>>>>>
>>>>>>>> Thanks & regards,
>>>>>>>> -Prabath
>>>>>>>>
>>>>>>>> On Tue, Jul 14, 2015 at 1:07 PM, Prabath Siriwardena <
>>>>>>>> prab...@wso2.com> wrote:
>>>>>>>>
>>>>>>>>> Hi Suemdha,
>>>>>>>>>
>>>>>>>>> We discussed most of the stuff with the API Manager team before
>>>>>>>>> doing this.
>>>>>>>>>
>>>>>>>>> At the moment API Manager implementation does not have any of
>>>>>>>>> these capabilities and most of the time need to write a workflow or 
>>>>>>>>> modify
>>>>>>>>> a workflow..
>>>>>>>>>
>>>>>>>>> Thanks & regards,
>>>>>>>>> -Prabath
>>>>>>>>>
>>>>>>>>> On Tue, Jul 14, 2015 at 1:03 PM, Sumedha Rubasinghe <
>>>>>>>>> sume...@wso2.com> wrote:
>>>>>>>>>
>>>>>>>>>> Prabath,
>>>>>>>>>> I think this has some overlaps and improvements compared to what
>>>>>>>>>> we have done for API Manager about 2 years ago.
>>>>>>>>>> Let's have a discussion on how to bring best of both worlds.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Wed, Jul 15, 2015 at 12:49 AM, Prabath Siriwardena <
>>>>>>>>>> prab...@wso2.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi Isabelle,
>>>>>>>>>>>
>>>>>>>>>>> As per the offline chat - you talk about *workflow templates *
>>>>>>>>>>> here..
>>>>>>>>>>>
>>>>>>>>>>> The *workflow* implementation should be able to interpret the 
>>>>>>>>>>> *workflow
>>>>>>>>>>> template*.
>>>>>>>>>>>
>>>>>>>>>>> Lets take for example the following sample template..
>>>>>>>>>>>
>>>>>>>>>>> Step-1 Approvers : <role1> OR <role2> AND user1
>>>>>>>>>>> Step-2 Approvers : <role3> OR <role4> AND user3
>>>>>>>>>>>
>>>>>>>>>>> There can be multiple workflow implementations supporting the
>>>>>>>>>>> above - but the catch here is, when you have a concrete workflow
>>>>>>>>>>> implementation it should announce which templates are supported by 
>>>>>>>>>>> it. That
>>>>>>>>>>> is how the underneath framework knows - which templates are 
>>>>>>>>>>> supported by
>>>>>>>>>>> which workflows.
>>>>>>>>>>>
>>>>>>>>>>> Its pointless to have workflow templates in the system without
>>>>>>>>>>> having workflow implementations that support them.
>>>>>>>>>>>
>>>>>>>>>>> If there is a need to write a workflow template - then that
>>>>>>>>>>> means - you are also going to write a workflow that knows how to 
>>>>>>>>>>> interpret
>>>>>>>>>>> it.
>>>>>>>>>>>
>>>>>>>>>>> Users of the system need not to worrying about mapping templates
>>>>>>>>>>> to the implementations (workflows). Since the each workflow 
>>>>>>>>>>> announces which
>>>>>>>>>>> templates they support - the framework itself can do it.
>>>>>>>>>>>
>>>>>>>>>>> From user's point of view - what mostly matters is the workflow
>>>>>>>>>>> template (please see the above example). Templates decide what 
>>>>>>>>>>> needs to be
>>>>>>>>>>> done - and the workflow implementation decides how to do that.
>>>>>>>>>>>
>>>>>>>>>>> The user experience is like below.
>>>>>>>>>>>
>>>>>>>>>>> What do I need to know ?  I need to associate a workflow for the
>>>>>>>>>>> add-user operation.
>>>>>>>>>>>
>>>>>>>>>>> User first picks the *Attachment Point - *in this case add_user.
>>>>>>>>>>>
>>>>>>>>>>> Now - I need to specify under which conditions I need to execute
>>>>>>>>>>> this work flow..
>>>>>>>>>>>
>>>>>>>>>>> User fills the *Attachment Point Template* - execute this
>>>>>>>>>>> workflow if user's email address is from WSO2.
>>>>>>>>>>>
>>>>>>>>>>> Now - I need to select what needs to be done during the add user
>>>>>>>>>>> operation.
>>>>>>>>>>>
>>>>>>>>>>> User picks one of the available *workflow templates* - and fill
>>>>>>>>>>> the data required.
>>>>>>>>>>>
>>>>>>>>>>> If there are more than one implementations for the picked*
>>>>>>>>>>> workflow template *system will present you an option to pick
>>>>>>>>>>> the workflow (rather unlikely) if not - system already associates 
>>>>>>>>>>> the
>>>>>>>>>>> available workflow with the selected workflow template - user has to
>>>>>>>>>>> nothing there.
>>>>>>>>>>>
>>>>>>>>>>> Thanks & regards,
>>>>>>>>>>> -Prabath
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Jul 14, 2015 at 11:36 AM, Isabelle Mauny <
>>>>>>>>>>> isabe...@wso2.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Prabath,
>>>>>>>>>>>>
>>>>>>>>>>>> Couple of clarifications:
>>>>>>>>>>>> - If a user ( customer ) adds a template, what would they need
>>>>>>>>>>>> to write ? The template definition *AND* the implementation (i.e. 
>>>>>>>>>>>> executor)
>>>>>>>>>>>> ? i.e other words they have to describe the interface to the 
>>>>>>>>>>>> workflow
>>>>>>>>>>>> itself and then implement the workflow in say BPEL ? Or Java ? or 
>>>>>>>>>>>> whatever
>>>>>>>>>>>> ?
>>>>>>>>>>>> - How does a customer maps between the template and the
>>>>>>>>>>>> executor ? (i.e. how do parameters defined in template becomes 
>>>>>>>>>>>> Receive data
>>>>>>>>>>>> in BPEL for example)
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Isabelle.
>>>>>>>>>>>>
>>>>>>>>>>>> -------------------------------------------------------------------------------------
>>>>>>>>>>>> *Isabelle Mauny*
>>>>>>>>>>>> VP, Product Management - WSO2, Inc. - http://wso2.com/
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Jul 14, 2015 at 6:22 PM, Prabath Siriwardena <
>>>>>>>>>>>> prab...@wso2.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> It looks like still there are some confusions regarding IS
>>>>>>>>>>>>> workflow implementation. So, thought of sharing my thoughts on 
>>>>>>>>>>>>> the design -
>>>>>>>>>>>>> and hopefully this be helpful to clear out the doubts.
>>>>>>>>>>>>>
>>>>>>>>>>>>> AFAIK - the framework for the following is already implemented.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Basic design principals.
>>>>>>>>>>>>>
>>>>>>>>>>>>> 1. Simplicity. Keep simple things simple and have provisions
>>>>>>>>>>>>> to add more complex stuff
>>>>>>>>>>>>> 2. Not coupled into any implementation. No hard coupling to
>>>>>>>>>>>>> BPEL
>>>>>>>>>>>>> 3. Not coupled into WSO2 BPS. (part of 2 as well)
>>>>>>>>>>>>> 4. Not specific to IS
>>>>>>>>>>>>>
>>>>>>>>>>>>> Terminology:
>>>>>>>>>>>>>
>>>>>>>>>>>>> 1. *Workflow* - implementation independent abstract
>>>>>>>>>>>>> representation of the concrete workflow has two parts,
>>>>>>>>>>>>> *initializer* and the *executor*.
>>>>>>>>>>>>>
>>>>>>>>>>>>> If its BPEL based workflows the initializer can be used to
>>>>>>>>>>>>> initialize the BPEL and deploy it in the corresponding BPEL 
>>>>>>>>>>>>> engine.
>>>>>>>>>>>>>
>>>>>>>>>>>>> And the executor will execute the workflow in runtime.
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2. *Attachment Point* - you should be able to attach a
>>>>>>>>>>>>> workflow to an *Attachment Point *and will get executed in
>>>>>>>>>>>>> runtime when a request hits the corresponding  *Attachment
>>>>>>>>>>>>> Point*.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Some examples of *Attachment Points* : add_user, delete_user,
>>>>>>>>>>>>> add_role, add_xacml_policy, update_xacml_policy.
>>>>>>>>>>>>>
>>>>>>>>>>>>> *Attachment Points* - are independent from the *workflow*.
>>>>>>>>>>>>>
>>>>>>>>>>>>> *Attachment Points* are introduced into system via an OSGi
>>>>>>>>>>>>> service. For example user_add, user_update, role_add - all those 
>>>>>>>>>>>>> Attachment
>>>>>>>>>>>>> Points are announced into the system by a 
>>>>>>>>>>>>> UserManagerOperationListner.
>>>>>>>>>>>>>
>>>>>>>>>>>>> *Attachment Points *can be developed and deployed
>>>>>>>>>>>>> independently. Once the system discovers the availability of an 
>>>>>>>>>>>>> *Attachment
>>>>>>>>>>>>> Point *- it will display that to the user - so he can engage
>>>>>>>>>>>>> and workflow to that *Attachment Point.*
>>>>>>>>>>>>>
>>>>>>>>>>>>> 3. *Attachment Point Template*
>>>>>>>>>>>>>
>>>>>>>>>>>>> These are coupled to specific* Attachment Points*. For
>>>>>>>>>>>>> example, the *Attachment Point Template *- associated with
>>>>>>>>>>>>> the user_add *Attachment Point* may look like following.
>>>>>>>>>>>>>
>>>>>>>>>>>>> *user match : <reg-ex>*
>>>>>>>>>>>>>
>>>>>>>>>>>>> Now the *Attachment Point* will invoke the associated
>>>>>>>>>>>>> workflow executor only if the above criteria is met.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> 4. *Workflow Template *: These templates should be announced
>>>>>>>>>>>>> to the system along with the *workflow* implementation. This
>>>>>>>>>>>>> template is independent from the *Attachment Point Template*.
>>>>>>>>>>>>> This tell how to configure the workflow. With this approach you 
>>>>>>>>>>>>> can have
>>>>>>>>>>>>> the same work flow - but configured in different ways based on 
>>>>>>>>>>>>> the*
>>>>>>>>>>>>> Attachment Point*.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Once example could be:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Step-1 Approvers : <role1> OR <role2> AND user1
>>>>>>>>>>>>> Step-2 Approvers : <role3> OR <role4> AND user3
>>>>>>>>>>>>>
>>>>>>>>>>>>> likewise...
>>>>>>>>>>>>>
>>>>>>>>>>>>> Okay  - so far everything discussed above are related to the
>>>>>>>>>>>>> core framework design.
>>>>>>>>>>>>>
>>>>>>>>>>>>> In IS 5.1.0 we need to have a concrete implementation of
>>>>>>>>>>>>> followings..
>>>>>>>>>>>>>
>>>>>>>>>>>>> 1. *Attachment Points*- for all user / role related
>>>>>>>>>>>>> operations.
>>>>>>>>>>>>> 2. *Attachment Point Templates* -  for all user / role
>>>>>>>>>>>>> related operations.
>>>>>>>>>>>>> 3. *Workflow* - initiator and executor for WSO2 BPS BPEL
>>>>>>>>>>>>> implementation - and concrete multi-step approval BPEL workflow.
>>>>>>>>>>>>> 4. *Workflow Templates*: A template for the multi-step
>>>>>>>>>>>>> approval BPEL workflow
>>>>>>>>>>>>>
>>>>>>>>>>>>> Please let me know if you have any doubts or suggestions..
>>>>>>>>>>>>> also Johann/Pulsathi please verify whether the implementation is 
>>>>>>>>>>>>> done
>>>>>>>>>>>>> according to this.
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Thanks & Regards,
>>>>>>>>>>>>> Prabath
>>>>>>>>>>>>>
>>>>>>>>>>>>> Twitter : @prabath
>>>>>>>>>>>>> LinkedIn : http://www.linkedin.com/in/prabathsiriwardena
>>>>>>>>>>>>>
>>>>>>>>>>>>> Mobile : +1 650 625 7950
>>>>>>>>>>>>>
>>>>>>>>>>>>> http://blog.facilelogin.com
>>>>>>>>>>>>> http://blog.api-security.org
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Thanks & Regards,
>>>>>>>>>>> Prabath
>>>>>>>>>>>
>>>>>>>>>>> Twitter : @prabath
>>>>>>>>>>> LinkedIn : http://www.linkedin.com/in/prabathsiriwardena
>>>>>>>>>>>
>>>>>>>>>>> Mobile : +1 650 625 7950
>>>>>>>>>>>
>>>>>>>>>>> http://blog.facilelogin.com
>>>>>>>>>>> http://blog.api-security.org
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Architecture mailing list
>>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> /sumedha
>>>>>>>>>> m: +94 773017743
>>>>>>>>>> b :  bit.ly/sumedha
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Architecture mailing list
>>>>>>>>>> Architecture@wso2.org
>>>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Thanks & Regards,
>>>>>>>>> Prabath
>>>>>>>>>
>>>>>>>>> Twitter : @prabath
>>>>>>>>> LinkedIn : http://www.linkedin.com/in/prabathsiriwardena
>>>>>>>>>
>>>>>>>>> Mobile : +1 650 625 7950
>>>>>>>>>
>>>>>>>>> http://blog.facilelogin.com
>>>>>>>>> http://blog.api-security.org
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Thanks & Regards,
>>>>>>>> Prabath
>>>>>>>>
>>>>>>>> Twitter : @prabath
>>>>>>>> LinkedIn : http://www.linkedin.com/in/prabathsiriwardena
>>>>>>>>
>>>>>>>> Mobile : +1 650 625 7950
>>>>>>>>
>>>>>>>> http://blog.facilelogin.com
>>>>>>>> http://blog.api-security.org
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Architecture mailing list
>>>>>>>> Architecture@wso2.org
>>>>>>>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Thanks & Regards,
>>>>> Prabath
>>>>>
>>>>> Twitter : @prabath
>>>>> LinkedIn : http://www.linkedin.com/in/prabathsiriwardena
>>>>>
>>>>> Mobile : +1 650 625 7950
>>>>>
>>>>> http://blog.facilelogin.com
>>>>> http://blog.api-security.org
>>>>>
>>>>
>>>>
>>>
>>
>
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to