Hello to everyone in the bpm'online community,

We have not been able to solve a specific challenge. We have different lookups for Zip Codes, City, Region, State, etc. and we need to find the best way to select a Zip Code and have the rest of the corresponding data autofill correctly.

I have the following two questions:

1) What would be the ideal way of importing lookup data so that the city, region, etc. are tied to their specific Zip Code without causing errors in bpm?

2) Is this a task that requires C# programming? i ask as we have been struggling to find a qualified programmer to help us with the processes so if this is the case, we would really appreciate a clear explanation on how to do this so that we can become experts ourselves.

I don't know if this is asking too much, but we would really appreciate any help or idea you can provide.

Like 0

Like

3 comments

Dear Ricardo,

It depends on the way you want to tie ZIP Code to cities. In case you have another lookup Zip Codes were you have zip code+ city you can import Zip Codes into this object with cities column being filled in. Lookup field's value will be selected during import in case city name is found in Cities lookup, or will create new one.

In case you have Zip codes only in your lookup and you have added the lookup column "Zip Code" to Cities lookup and you want values to be selected you can update records (cities) with Zip Codes. Data import functionality can be used for importing along with creating new records.

Lets say you have 5 zip codes in your lookup and 5 cities in Cities lookup. You can simply export all cities with empty field "Zip code" into excel, fill in the value of the column by real Zip code and import into Cities object selecting City as a field for de-duplication. In this case system will update existing records instead of creating new ones. Basically the column Zip Code will be filled in by Zip codes from your lookup. 

Note that names/codes should be identical to the ones used in lookup, any different letter/number will force the system to create new record and duplicates can be created.

You can check this article, this question in particular:

How do I update a single column without modifying other columns during import?

Oliver 

Oliver,

Thank you so much for answering! we will try to apply the information you provided and report on the results.

Ricardo

Dear Halludeen,

Hope you are doing well today.

Here is the new link:

https://academy.bpmonline.com/documents/base/7-13/universal-import-exce…

Best regards,

Dean

Show all comments

Hi community,

I would like to implement a lock record for a Lead according to its stage. I am trying to implement a Business Rule with the stage (disqualified) as condition, but I can´t find a 'make field read-only' action. Any thoughts?

Thanks.

Like 0

Like

2 comments

Dear Danilo,

You can use "make field editable" action for this purpose. So instead of:

If stage = disqualified

Then make field read-only (not editable)

Use the following logic:

if stage ≠ disqualified

Then make this field editable

In this case all stages except disqualified will have fields editable and disqualified will make all field non-editable.

Oliver

Oleh Chudiiovych,

Sorry for taking so long in answering this. It worked for me and I have the solution in production now. Regards.

Show all comments

Hello, 

 

I am trying to edit the schema for a page (Quotes) to grab the connected project's contact and account names with the attribute and method properties.

 

So far my code is grabbing the name, but it is not being set correctly. As well, the contact title for the page is disappearing when I add the attribute.KwlContact bit 

Hello, 

 

I am trying to edit the schema for a page (Quotes) to grab the connected project's contact and account names with the attribute and method properties.

 

So far my code is grabbing the name, but it is not being set correctly. As well, the contact title for the page is disappearing when I add the attribute.KwlContact bit 

 

This is the result:

 

If I comment out the  attribute.KwlContact bit I get this:

 

What am I missing to get this code to work?

Like 0

Like

Share

1 comments

Dear Philip,

First. An attribute doesn't know what is "onChanged" property. To launch a method when an attribute is changed use "dependencies" property:

 attributes: {

            "KwlContactName": {

                "dataValueType": this.Terrasoft.DataValueType.TEXT,

                "type": this.Terrasoft.ViewModelColumnType.ENTITY_COLUMN,

                "columnPath": "KwlProject.Contact.Name",

                "caption": {bindTo: "Resources.Strings.KwlContactCaption"},

                "dependencies": [

                    {

                        "columns": [ "KwlProject" ], // columns that trigger a call

                        "methodName": "onSomePropertyChanged"

                    }

                ]

            }

        },

Second. You cannot write project["Contact.Name"] because project variable doesn't have anything but value and display value fields. You should use client EntitySchemaQuery to read new contact name and set it to KwlContactName in async way.

Third. It seems you have an issue with localizable string. Maybe it doesn't exist or you didn't specified a value for language of user's profile.

Show all comments

Is it possible to set up text placeholder for textareas without querying the DOM and applying it manually?

Like 0

Like

6 comments

Could you, please describe your case in more details?  Also, any examples/screenshots will be appreciated

Tetiana Markova,

When I have a text field like this:

I want to have some text inside it while the user has not filled it yet, like when using standard placeholder attribute on an input field:

Carlos,

Thank you for your specification.

You need to define "placeholder" property for your element in the diff array. Please, see my example for JobTitle field in the ContactPageV2 schema:

{

    "operation": "merge",

    "parentName": "ProfileContainer",

    "propertyName": "items",

    "name": "JobTitleProfile",

    "values": {

        "bindTo": "JobTitle",

        "controlConfig": {

            "className": "Terrasoft.TextEdit",

            "placeholder":{

                "bindTo": "Resources.Strings.Placeholder"

            },

            "classes": ["placeholderOpacity"]

        }

    }

}

You can also find other examples in the base packages.

 

Tetiana Markova,

Thank you very much, it works nicely.

where i have to write my input value?

1)Or enter the string resource on the page or enter directly (2nd option)

Localized strings and images are the resources of the client schema that are most often used in the implementation logic of the module.

Add resources to the client schema in the [Structure] tab of the client schema designer. The application core automatically generates a special [Client module name]Resources module, which contains resources of the client module. The localizableStrings property stores schema's localized strings. The images property stores image resources.

In order to access a resource module from a client module, you need to import the resource module as a dependency into the client module.

Use resource string:

"placeholder":{

                "bindTo": "Resources.Strings.Placeholder"

            },

2) directly

 "placeholder": "I'am empty"

 

Show all comments

Hi community!

How are you?

I hope you can help me!

How can I add a button in row datagrid of Products? I add a image below showing in red color where I need add the button!

King Regards,

 

Ezequiel

Like 0

Like

1 comments

Please investigate how the "activeRowActionOpenCard" button was added into the "SupplyPaymentDetailV2" module. Please feel free to create your own container and apply your CSS in order to create the left button. The handler for the buttons is in the "onActiveRowAction" method in the "ConfigurationGridUtilities" module. Please put a breakpoint and click on the button on a record in the "Installment plan" detail on the "Order" page. You'll see how to handle the click. Please note that you can override the "onActiveRowAction" method on the detail schema. 

Please read bpm'online development guide for more information.

Show all comments

When I create a process and a pre-configured page in this process I get two sets of language resources: one for the process and one for the page. Page resource files contain translatable strings for all the UI elements on that page. Process resource files contain translatable string for the process: things like parameter names, step names, etc.

I wanted to translate my pre-configured page, so I edited resource.pl-PL.xml and translated all the strings. It turned out it had no visible impact at all, the page was still entirely in English. Only when I translated process parameters connected to the page UI elements, the page got translated. Why is that so? What's the purpose of page translation files if they don't seem to have impact on the UI?

Like 0

Like

6 comments

Dear Carlos,

I do not understand about what resource.pl-PL.xml you are talking. Translations for business processes are located in Translations section. Could you add some screenshots to clarify your point?

Peter Vdovukhin,

The Translations section seems very unintuitive. There are a lot of strings there that I'm not interested in translating, cause they're not even visible to the user and I don't know how to find those that I'm interested in. I tend to write translations in translation files directly (like resource.pl-PL.xml). Those files get created along with their schmas - for example if I create a pre-configured page UsrCustomPage I get a schema in MyPackage/UsrCustomPage and translation files in MyPackage/UsrCustomPage.ClientUnit

You should read this topic with subtopics to find out how to use the Translations section. Just filter by the key contains [name of business process] and you will see all the data you need. After that open the first row in a separate window using special button, translate it and click Next to open the next string to translate. Then just click “Apply translations”.

Since you are using File design mode you could not apply translations when did a half of a translation job.

Peter Vdovukhin,

I'm sorry but it's not very helpful. First of all filtering, by "key contains [name of business process]" includes a lot of strings that don't need translation (process step names, flow names, process parameter names, etc.). But that's beside the point. What I meant in the original question is that the page translation strings seem to have no impact on anything. I'll give an example: I have a process step named PreconfiguredPageTranslationTask and it is connected to a page called UsrClientUnit1. I translated all the strings for the page UserClientUnit1:

It has no impact on the page:

I then translated a process parameter connected with PreconfiguredPageTranslationTask:

It has impact on the page:

So the effect is the same as when translating the resource files directly. Back to my original question - what's the purpose of the page translation strings if they don't seem to affect anything?

Hi, Carlos.

I see. The thing is that UsrClientUnit1.Parameters translations are used during editing this page in the business process.

Before translation:

After translation on Russian:

 

Peter Vdovukhin,

Ok, thank you very much for the explanation. To be honest it seems confusing, I wish there was a clearer separation between translation strings that the average user sees and the ones that appear in the designer and only developers see.

Show all comments

Hello Community!

I need in a specific page not return to the list section, when the user put save the config set in IsSilent =  true; how allways can set true?

Like 0

Like

1 comments

Dear Federico,

All you need is overriding a save() method in your page schema.

    methods: {

            save: function(config) {

                if (config) {

                    config.isSilent = true;

                }

                else {

                    config = {

                        isSilent: true

                    };

                }

                this.callParent([config]);

            }

        },

Show all comments

After refreshing page on my custom sections I get the following error:

GET http://localhost/0/QuickFilterViewV2Resources.js 404 (Not Found)

It does not happen on Contacts or Accounts sections and it doesn't happen if I just enter my sections normally (no refreshing). Do you know what I'm doing wrong that I get this error?

Like 0

Like

2 comments

The issue happens due to the fact that the static content is disabled and the development in the file system option is enabled. At the moment the only way to bypass is to add the QuickFilterViewV2 module into the define of every schema of the sections where you face the issue.

Anyway, you can ignore the exception on development instances. It won't affect production ones.

Thanks, I'll probably leave it like this then.

Show all comments

Let's say I read one object using Read data step and I choose to only read columns First name and Last name. How do I reference that data in Script task? I know I can copy those strings from step parameters to process parameters using Formula step but maybe there is a better way.

Like 0

Like

15 comments

Dear Carlos,

For the [Script-task] elements and methods that have the [For an interpreted process] checkbox selected, the wrapper class is generated that contains the initialization and declaration of methods. This wrapper enables you to access the process values. 

The Get method returns the value of an item or process.

Method signature:

Get<T>(string path)

where:

  • T — parameter value type.
  • path — a string that specifies the path to a parameter or property. The path is built according to these rules:
  1. “parameter name”
  2. “property name”
  3. “element name.parameter name”
  4. “element name.property name”

Oliver

Oliver,

I don't see a parameter First name though. The only related parameter that I see is Columns to read.

Carlos Zaldivar Batista,

You don't need any parameters and select any specific columns to read in the element Read Data, simply use “element name.property name” to get the field value in the Script task.

Oliver

Oleh Chudiiovych,

Ok, so I have a step with code ReadSomeData and I try to read the columns of returned object like this:

Get&lt;Entity&gt;("ReadSomeData.ResultEntity").GetTypedColumnValue&lt;string&gt;("UsrFirstName")

I get NullReferenceException though because the Get method returned null.

Try read data from all columns. Also possible for your query (filter) no records? Do it work if you remove the filter

Grigoriy,

I read data from all columns and the query returns records.

Dear Carlos,

As far as we can see from your method you are trying to read values from the "UsrFirstName" column and we don't know what data is stored there and what are you trying to read. Please re-check all your columns and also try Grigoriy's suggestion about filters.

Oscar

Ok, so I created a new trial environment with default test data and in that environment I created a process:

 

The Read data step looks like this:

I set up the step name too:

And that is my Script task code:

Name is a process parameter that is shown in the auto-generated screen. That's what the screen shows after running the process:

There are no filters in the read data step and the data is there. What should I change to make the script task work?

Hi by default read data have code "ReadDataUserTask1".

Try this:

var entity = Get<Entity>("ReadDataUserTask1.ResultEntity"); 

 

See read data advanced mode for get elenent code (

In the advanced mode, the element setup area contains additional parameters and connections with system records

To access the advanced mode, click the btn_advanced_mode.png button in the element setup area and select the [Advanced mode] menu command

)

Sory. For interpretable processes, you can only directly work with the methods and parameters of the elements through the formula.

In autogenerate page set page item via formula like:

[#Read data 1.First item of resulting collection.First name#] 

Grigoriy,

Thank you. And is it possible to use this formula in a script tasks?

Yes

1. Create a process parameter of type String - TestParam.

2. In the parameter value specify [#Read data 1.First item of the resulting collectionFirst name#].

3. In the Task-script element, work with the parameter.

     var contactFullName = Get<string> ("TestParam");

Grigoriy,

Ok, thank you.

Does anyone know if this is still the case? i.e. that it's necessary to save each individual field to a parameter in order to access them inside a Script Task element of a Business Process? It seems like it really should be simpler to access data on any of the fields!

 

I am aware of being able to query the entity directly within the Script Task, but I'd like to keep as much of the business logic in easy-to-read BP steps as possible, including reading data.

Dear Harvey,

 

Yes, the logic remains the same. There is still to call for read data element through the script task without the intermediate process parameters or settings. This logic will be review by our developers, it is confirmed by our R&D but we do not know when it will be done.

 

Regards,

Dean

 

Show all comments

Hi community,

 I need to add a detail into contact with information from another entity without link to contact. for example: promos to be offer to the contact.

If it possible? How can I do? 

Have a nice weekend.

Regards

Like 0

Like

3 comments

Dear Uriel,

You can create database view and then add the detail based on it. Please note that there are some limitations in this case - you will be able to view the detail content, though there will be no option to edit it or add new data there.

Lisa

Lisa Brown,

Thank you Lisa. I miss that I need to filter the data based on some contact field. For example: get records for the new entity where some field match with contact city.

Could you help me?

Regards

Uriel,

The previous advice works with the new condition too.

Show all comments