Hi Community

Our organisation has just implemented 2 factor authentication for Office 365 using a product called Duo.  It seems to have broken the email, calendar and activities integration.

Does anyone have experience of making 2 factor authentication work with email integration in bpm'online?

Your help is appreciated.

Best

Greg

Like 0

Like

3 comments

Dear Greg,

 

Now, when the 2fa is turned on, you need to go through the additional steps to be able to sync the mailbox successfully. Please use the following manual to create an app password for bpm'online - https://support.office.com/en-us/article/Create-an-app-password-for-Office-365-3e7c860f-bda4-4441-a618-b53953ee1183. 



Then you'll be able to use this password in bpm'online to get the synchronization to work. 

 

Lisa

1. Is AppPassword still recommended for Creatio syching with Office365 that has two-factor authentification? Where in Creatio is the AppPassword used in Creatio in this scenario?

What mailbox setup (link here) is required for sych with Office365 with two-factor authentication?

 

2. Or is the OAuth 2.0 setup now the recommended way?

https://academy.creatio.com/docs/user/setup_and_administration/base_int…

I believe Office365 now forces the use of OAuth (or at least heading in that direction). 

I also have detailed steps for setting up Creatio for use with O365 OAuth here if you need any extra detail on things (the Academy article and doc provided from support is a little out-dated) https://customerfx.com/article/setting-up-microsoft-office-365-email-fo…

Ryan

Show all comments

Hello!

I have to do a validation in the Employee Registration, there can't be two employees with the same file number. For that, add a validation on the page and use ESQ to verify the data in the database.

The problem is that the result of the validation method is always executed before the result that ESQ GetEntityCollection() returns. I need to establish the error message after evaluating the result of the query.

Is there any way or alternative of waiting for the result of the ESQ and then validating to establish the error message?

I appreciate your help.

I Attach the code:

validarNroLegajo: function() {
    var invalidMessage = "";
	var repetidos = 0;
	//Creo consulta para Empleado
	var consultaEmpleado = this.Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "Employee"
	});
	//Cuento NroLegajos
	consultaEmpleado.addAggregationSchemaColumn("UsrNroLegajo", Terrasoft.AggregationType.COUNT, "NroLegajoRepetido", Terrasoft.AggregationEvalType.ALL);
	//Filtro por Nro de legajo
	var filtroNroLegajo = consultaEmpleado.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrNroLegajo", this.get("UsrNroLegajo"));
	//Filtro por Id de empleado
	var filtroId = consultaEmpleado.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "Id", this.get("Id"));
	//Agrego filtros a la consulta
	consultaEmpleado.filters.add("filtroNroLegajo", filtroNroLegajo);
	consultaEmpleado.filters.add("filtroId", filtroId);
	//debugger;
	consultaEmpleado.getEntityCollection(function(result) {
		debugger;
		if (result.success) {
				repetidos = result.collection.collection.items["0"].values.NroLegajoRepetido;
		}
	}, this);
	debugger;
	if (repetidos > 0)
	{
		invalidMessage = this.get("Resources.Strings.ValidacionNroLegajo");
	}
	return {
		// Validation error message displayed in the data window
		// when saving a page.
		fullInvalidMessage: invalidMessage,
		// Validation error message displayed under the control item.
		invalidMessage: invalidMessage
	};
}

 

Regards,

 

Like 0

Like

2 comments

Dear Ezequiel,

As you have already noticed, ESQ functions are asynchronous functions, therefore the validarNroLegajo function is executed before response received.   

In order to ensure, that a particular function or methods are executed based on the ESQ response, please call the function with invalid messages in the ESQ callback.

You can also create a virtual attribute, which you'll set to "true" in the ESQ callback. Such approach is also suitable, if you need to proceed with some actions based on the ESQ result.

 

//create an attribute
attributes: {
    "NumberDoesNotExist": {
        "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        "dataValueType": Terrasoft.DataValueType.BOOLEAN,
        "value": false
    }
}
 
//set attribute in the ESQ callback
 
 
...
select.getEntityCollection(function(response) {
    if (response.success) {
      var collection = result.collection;
      if (collection && collection.collection.length === 0) {
       this.set("NumberDoesNotExist", true);
      } else {
        this.showInformationDialog("Error!");
      }
    }
}

Another option if to check during save() method based on the attribute, you can do the following:

save: function() {
    if(this.get("NumberDoesNotExist")) {
        this.callParent(arguments);
    } else {
        this.showInformationDialog("Error!");
    }
}

Hope you find this helpful.

Regards, 

Anastasia

Dear Anastasia, thanks for your help. I could solve the problem! Regards!

Show all comments

Hello!! I have a detail in contact with lookup insert but with single select not mutiselect.

In the addCallBack (after insert the data) how can make the reload of the grid to show the new insert?

addCallBack: function(args) {
                    var ContactId = this.get("MasterRecordId");
					var MyId;
                    // Collection passed to query.
                    this.selectedItems = [];
                    // Copying necessary data.
                    var lookupSelectedRows = args.selectedRows.getItems();
                    if (lookupSelectedRows && lookupSelectedRows.length > 0) {
                        // Receiving the Id of the record selected in the lookup.
                        Id = lookupSelectedRows[0].Id;
 
                    }
 
                    var insert = Ext.create("Terrasoft.InsertQuery", {
                        rootSchemaName: this.entitySchemaName
                    });
                    insert.setParameterValue("MyRelationId", Id, this.Terrasoft.DataValueType.GUID);
                    insert.setParameterValue("Contact", ContactId, this.Terrasoft.DataValueType.GUID);
                    insert.execute();
                    ///Neeed update the grid to show the new value
                },

Regards,

 

Like 0

Like

1 comments

Hi,

 

The similar functionality was discussed in this post - https://community.bpmonline.com/questions/reloading-detail. Feel free to check it. 

Lisa

Show all comments