2022 June Release

Comprehensive Example: Service ProcessPermanent link for this heading

This example demonstrates how a simple service process can be modeled, using templates, text modules, user-defined forms and BPMN processes – free of media disruption.

Objective

The following service process should be modeled:

Customer

  • The customer sends a support request via e-mail.

Support Department

  • The e-mail is imported via the “Cloud Mail Import” function.
  • An inbox assigns the category “Support Request” to the e-mail and the process “Check Service Request” is initiated.
  • The support employee validates the service request in the workflow. For this purpose, the comment function can be used.

Service Department

  • The service employee issues a service order for the service request in the workflow.

Field Service

  • The field service employee conducts the service order.
  • The field service employee completes the service call report in the workflow as predefined in a template and uploads images for documentation purposes.

Support Department

  • The support employee closes the service call report in the workflow. For this purpose, the signature function can be used, and thus the service call report can be countersigned.

Service Department

  • The service employee closes the service order in the workflow.

In the following chapters, you can find the elements and adjustments necessary for implementing the service process. For the sake of a compact presentation, there is no step-by-step instruction. The necessary basic information is available in the previous chapters.

FormsPermanent link for this heading

In a form and category collection, create the forms as described in the following chapters and release them for usage. You need to re-release them after an alteration.

  • Service Request
    A service request is an e-mail that is categorized as a service request.
  • Service Order
    A service order is created from a reviewed service request.
  • Service Orders
    Is used as a dashboard to present all service orders in one view.
  • Service Call Report
    A service call report is completed by the technician and countersigned by the customer.

Service RequestPermanent link for this heading

The “Service Request” form is defined as follows:

Common (Create Dialog)

  • Base Class: “Object With User Data”
  • Symbol: “Mail”
  • Suppress Template Creation: “Yes”

Service Request” page

  • Expression for Computing the Visibility: false;
    No additional fields are required since the service request is based upon an e-mail that comes with all necessary meta data. Hence, this form page should not be visible.
  • Separator
    Add a separator because the form page must contain at least one element.

Common (Properties)

  • Applicable for: “E-Mail (MIME)”, “E-Mail (Microsoft Office Outlook)”

Service OrderPermanent link for this heading

The “Service Order” form is defined as follows:

Common (Create Dialog)

  • Base Class: “Container With User Data”
  • Use as File: “Yes”
  • Symbol: “Support Request”

Check List” page

  • Expression for Computing the Visibility: cooobj.FSCFOLIO@1.1001:bostate not in [#FSCFOLIO@1.1001:StateReceived, #FSCFOLIO@1.1001:StatePlanning];
    The tab should only be visible if this is useful (based on the status)
  • Ball Bearing Lubricated
    “Check Box”, Programming Name: “soballbearinglubricated”, Expression for Computing the Changeability: cooobj.FSCFOLIO@1.1001:bostate in [#FSCFOLIO@1.1001:StateInProgress];
  • Remarks
    “Input Field”, Type: “String”, Programming Name: “soremarks”

“Service Order” page

  • Number
    “Input Field”, Type: “Numerator”, Numerator Keys: “Teamroom”, Programming Name: “sonumerator”
  • Customer
    “Input Field”, Type: “Object” (“Standard Objects”, “User”), Programming Name: “socustomer”
  • Address
    “Input Field”, Type: “String”, Programming Name: “socustomeraddress”, Expression for Computing the Value:
    FSCFOLIO@1.1001:Address @address = cooobj.socustomer.FSCFOLIO@1.1001:address[0];
    if (@address) {
      @address.FSCFOLIO@1.1001:addrstreet + ", " +

      
    @address.FSCFOLIO@1.1001:addrzipcode + " " +
      
    @address.FSCFOLIO@1.1001:addrcity;
    }
  • Phone
    “Input Field”, Type: “String”, Programming Name: “socustomertelephone” Expression for Computing the Value:
    cooobj.socustomer.FSCFOLIO@1.1001:telephone[0].FSCFOLIO@1.1001:telnumber;
  • Activity
    “Input Field”, Type: “String”, Must Be Defined: “Yes”, Programming Name: “soactivity”, Expression for Computing the Changeability:
    cooobj.FSCFOLIO@1.1001:bostate in [#FSCFOLIO@1.1001:StateReceived, #FSCFOLIO@1.1001:StatePlanning];
  • Status
    “Standard Property”, Standard Property: “Processing State”, Label: “Status”, Expression for Computing the Changeability: false;
  • Service Technician
    “Input Field”, Type: “Object” (“Standard Objects”, “User”), Must Be Defined: “Yes”, Programming Name: “sotechnician”, Expression for Computing the Changeability: cooobj.FSCFOLIO@1.1001:bostate in [#FSCFOLIO@1.1001:StateReceived, #FSCFOLIO@1.1001:StatePlanning];
  • Service Appointment
    “Input Field”, Type: “Date”, Must Be Defined: “Yes”, Initialize With Current Date: “Yes”, Programming Name: “sodate”, Expression for Computing the Changeability: cooobj.FSCFOLIO@1.1001:bostate in [#FSCFOLIO@1.1001:StateReceived, #FSCFOLIO@1.1001:StatePlanning];

Documents” page

  • Documents
    “Item List”, Type: “Object” (“Commonly Usable Objects”, “Document”), Programming Name: “sodocuments”

Common (Properties)

  • Applicable for: “Container With User Data”
  • Available Processing States: “Received”, “Planning”, “In Progress”, “Done”, “Released”, “Not Released”
  • Default Processing State: “Received”
  • Name Build Configuration
    Note: Before defining the name build, release the form at least once.
    • Enable Name Build: “Yes”
    • Used Properties: “Name”
    • Expression for Computing the Name Build:
      "SO " + coouser.Format(cooobj.[#sonumerator], "0000") + " - " + coouser.Format(cooobj.objcreatedat, "yyyy-mm-dd") + " - " + cooobj.socustomer.GetName();

Service OrdersPermanent link for this heading

The “Service Orders” form is defined as follows:

Common (Create Dialog)

  • Base Class: “Room With User Data”
  • Symbol: “Tree”

“Service Orders” page

  • Service Orders
    “Item List”, Type: “Object” (“Forms”, “Service Order”), Default Form for Objects in Field: “Service Order”, Programming Name: “soserviceorders”

Common (Properties)

  • Applicable for: “Room With User Data”

Service Call ReportPermanent link for this heading

The “Service Call Report” form is defined as follows:

Common (Create Dialog)

  • Base Class: “Document With User Data”
  • Suppress Template Creation: “Yes”

“Service Call Report” page

  • Expression for Computing the Visibility: false;
    No additional fields are necessary. Hence, this form page should not be visible.
  • Separator
    Add a separator because the form page must contain at least one element.

Common (Properties)

  • Applicable for: “Microsoft Word Document”

Text ModulesPermanent link for this heading

In a text module collection, create the text modules as described in the following chapters.

The text modules are used in the template for the service call report. Depending on the result of technician’s check (OK, NOT OK), the text module is inserted in case of a positive or negative result. In order to simplify the example, only the test point “Ball Bearing Lubricated” is defined.

Ball Bearing Lubricated - OKPermanent link for this heading

The static text module (Word) “Ball Bearing Lubricated - OK” contains the text that is to be inserted upon a positive result.

"Usage” tab

  • Current Document: “Microsoft Word Document”, “Service Call Report”
  • Files: “Service Order”
  • Expression for Further Restrictions of Usability: cooobj.FSCFOLIO@1.1001:objfile.[#soballbearinglubricated] == true;

Ball Bearing Lubricated - NOT OKPermanent link for this heading

The static text module (Word) “Ball Bearing Lubricated - NOT OK” contains the text that is to be inserted upon a negative result.

"Usage” tab

  • Current Document: “Microsoft Word Document”, “Service Call Report”
  • Files: “Service Order”
  • Expression for Further Restrictions of Usability: cooobj.FSCFOLIO@1.1001:objfile.[#soballbearinglubricated] == false;

TemplatePermanent link for this heading

In a template collection, create a Microsoft Word document “Service Call Report” with fields, text module placeholders, and image placeholders.

“Template” tab

  • Category: “Service Call Report”
  • Files: “Service Order”

Fields (Word Document)

  • Customer
  • Address
  • Service Technician
  • Ball Bearing Lubricated

Text Module Placeholders (Word Document)

  • Ball Bearing Lubricated - NOT OK
  • Ball Bearing Lubricated - OK

Image Placeholders (Word Document)

  • Arbitrary image (alternative text, without quotes: “Picture before service call”)
  • Arbitrary image (alternative text, without quotes: “Picture after service call”)

ProcessesPermanent link for this heading

In a process collection, create the processes as described in the following chapters.

Pre-requisites:

  • It is assumed that the following departments exist in the organization: “Support Staff”, “Service Staff”, “Customers” (external organization).
  • An instance of the form “Service Orders” must exist (see chapter “Service Orders”).
  • An inbox “Support Inbox” must exist (see chapter “Inbox”). At this point, it suffices to have an inbox because the final configuration requires the process “Check Service Request”.

Note: In order to efficiently test the processes, make your user account the sole participant in every step. Only after a successful initial test is it advisable to assign participants for the productive operation of the processes.

Check Service RequestPermanent link for this heading

Create the BPMN process “Check Service Request”.

Pool

  • Applicable for: “Service Request”

Lane

  • Support Staff
    • Process Participant > Organizational Unit: “Support Staff”

Task

  • Check Service Request
    • Lane: “Support Staff”
    • Activity: “Review”
    • Expression When Completing the Activity: see below
      Note: You must use the Fabasoft Cloud ID of your objects.

Check Service Request (Expression When Completing the Activity)

// Replace: reference and domain ID of your forms (the
// reference can be found in the properties of the form category)

import LASC_1_8075RELEASEFORMS@1.506;

if (object.COOSIGNATURE@1.1:lastsigned == COO.1.1001.1.198684) {

  // Replace: ID of your external organization "Customer"
  FSCFOLIOCLOUD@1.1001:ExtOrganization @extorgcustomer = COO.1.506.1.8143;
  STRING @sender = object.COOMAPI@1.1:mailsender;
  STRING @email = (coouser.FSCEXPEXT@1.1001:RegexCapture(@sender,
    "[a-zA-Z0-9+._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9_-]+"))[0];
  // Creates a customer user object (if not existing)
  
User @newcustomer = coouser.FSCORGMGMT@1.1001:CreateUser(@email,
    , , , , , , , @extorgcustomer, false);

  // Replace: ID of the form template "Service Order" (the template can be
  // found in the properties of the form)
  
  FSCUSERFORMS@1.1001:ContainerWithUserForm @template = COO.1.506.3.3527;
  // Creates a service order object
  FSCUSERFORMS@1.1001:ContainerWithUserForm @instance =
    @template.FSCTEMPLATEMGMT@1.1001:InstantiateTemplateObject();
  @instance.[#sodocuments] += object;
  @instance.[#socustomer] = @newcustomer;
  @instance.[#soactivity] = object.objname;

  // Replace: ID of the "Sevice Orders" instance
  FSCUSERFORMS@1.1001:RoomWithUserForm @room = COO.1.506.3.3539;
  @room.ObjectLock(true, true);
  // Adds the service order object to the "Service Orders"
  @room.[#soserviceorders] += @instance;

  // Removes the e-mail from the "Support Inbox"
  
// Replace: ID of the "Support Inbox" instance
  FSCCLOUDMAIL@111.100:CloudMailInboxRoom @inbox = COO.1.506.3.3540;
  @inbox.ObjectLock(true, true);
  @inbox.FSCTEAMROOM@1.1001:ibrchildren -= object;

  // Starts the "Process Service Order" process
  // Replace: ID of the "Process Service Order" process (see next chapter)
  @instance.COOWF@1.1:StartProcessDiagram(COO.1.506.2.3543);

}

Process Service OrderPermanent link for this heading

Create the BPMN process “Process Service Order”.

Pool

  • Applicable for: “Service Order”

Lanes

  • Service Staff
    • Process Participant > Organizational Unit: “Service Staff”
  • Field Service
    • Process Participant > Abstract Participant: “Property of the Object” (“Service Technician”)

Tasks

  • Plan Service Order
    • Lane: “Service Staff”
    • Activity: “Edit”
    • Expression When Completing the Activity:
      object.ObjectLock(true, true);
      object.FSCFOLIO@1.1001:bostate = #FSCFOLIO@1.1001:StateInProgress;
  • Process Service Order
    • Lane: “Field Service”
    • Activity: “Edit”
    • Expression When Completing the Activity: see below

Process Service Order (Expression When Completing the Activity)

// Replace: reference and domain ID of your forms (the
// reference can be found in the properties of the form category)

import LASC_1_8075RELEASEFORMS@1.506;

object.ObjectLock(true, true);
object.FSCFOLIO@1.1001:bostate = #FSCFOLIO@1.1001:StateToVerify;

// Replace: ID of the "Service Call Report" Word template
COOMSOFFICE@1.1:WinWordObject @instance =
  COO.1.506.2.3535.FSCTEMPLATEMGMT@1.1001:InstantiateTemplateObject();
@instance.FSCFOLIO@1.1001:objfile = object;

// Adds the Word instance to the service order documents
object.[#sodocuments] += @instance;

// Resolves the text modules in the Word instance
@instance.FSCTEMPLATEMGMT@1.1001:ResolveTextModules();

// Updates the tables in the Word instance
@instance.FSCAPPTOOLS@1.1001:UpdateTables();

// Adds the first and the last image of the service order documents list to
// the Word instance

@instance.FSCAPPTOOLS@1.1001:UpdatePictures("Picture before service call", object.[#sodocuments][IsUsable(#FSCWEBCONT@1.1001:ImageObject)][0]);
@instance.FSCAPPTOOLS@1.1001:UpdatePictures("Picture after service call", object.[#sodocuments][IsUsable(#FSCWEBCONT@1.1001:ImageObject)][-1]);

// Starts the "Close Service Call Report" process
// Replace: ID of the "Close Service Call Report" process (see next chapter)
@instance.COOWF@1.1:StartProcessDiagram(COO.1.506.3.3544);

  • Close Service Order
    • Lane: “Service Staff”
    • Activity: “Close File”
    • Expression When Completing the Activity:
      object.ObjectLock(true, true);
      object.FSCFOLIO@1.1001:bostate = #FSCFOLIO@1.1001:StateReleased;

Close Service Call ReportPermanent link for this heading

Create the BPMN process “Close Service Report”. The sign activities are only available if there are digital signatures configured for your organization.

Pool

  • Applicable for: “Service Call Report”
  • Object Class/Category of the File: “Service Order”

Lanes

  • Service Staff
    • Process Participant > Organizational Unit: “Service Staff”
  • Customer
    • Process Participant > Abstract Participant: “Property of the File of the Object” (“Customer”)

Tasks

  • Close Service Call Report
    • Lane: “Service Staff”
    • Activity: “Sign Digitally”
  • Countersign Service Call Report
    • Lane: “Customer”
    • Activity: “Sign Digitally”
  • Service Call Report Signed
    • Lane: “Service Staff”
    • Activity: “Take Note”

InboxPermanent link for this heading

Configure the inbox “Support Inbox” (see chapter “Processes”) with the following rule.

Inbox

  • Apply Rules Only for Top Level: “Yes”

Rule

  • Name: “Process Service Request”
  • Actions: “Assign category ‘Service Request’”, “Start process ‘Check Service Request’”

Cloud Mail ImportPermanent link for this heading

In a Teamroom, create an a “Cloud Mail Import” named “Support Mail Inbox” which imports e-mails from your support mailbox.

“E-Mail Server” tab

  • Enter mail server data.
  • Target Folder: “Support Inbox”

“Automation” tab

  • E-mails can be imported regularly and automatically.

ResultPermanent link for this heading

Having completed the model-based customizations, you can test the service process.

  1. Make sure to have an e-mail in your mailbox.
  2. Navigate to your “Support Mail Inbox” and execute the context menu command “Check Now”.
  3. Navigate into your “Support Inbox”. Therein, the e-mails from your e-mail server must be available. The e-mails must be assigned the category “Service Request” (“General” tab) and the process “Check Service Request” (“Processes” tab) must be available.
  4. Navigate into your worklist.
    Note: It is assumed that for the purpose of this test you made yourself the sole participant in all activities.
  5. In the activity “Check Service Request”, do the task “Review”.
  6. In the activity “Plan Service Order”, do the task “Open Properties”. In the field “Service Technician”, select yourself.
  7. In the activity “Plan Service Order”, do the task “Finished”.
  8. In the activity “Process Service Order”, do the task “Open Properties”. Check the option “Ball Bearing Lubricated”.
  9. In the activity “Process Service Order”, do the task “Upload” two times to upload two images which serve as evidence.
  10. In the activity “Process”, do the task “Finished”.
  11. In the activity “Close Service Call Report”, do the task “Sign Digitally and Close”.
    Note: In this example, you must skip the activity “Close Service Order” for now since it must be done at the end.
  12. In the activity “Countersign Service Call Report”, do the task “Sign Digitally”.
  13. In the activity “Service Call Report Signed”, do the task “Take Note”.
  14. In the activity “Close Service Order”, do the task “Close”. This will close the service order.

Now all processes are concluded. The finished service order can be found in “Service Orders”.