@jchamorro when you want to upsert records, you have only 2 choices:
- use the record Id for the "Upsert Key Column" (that means you know it and the record will be updated)
- use a field declared as an external Id (that means the record will be updated if it already exists and inserted if it doesn't)
Of course, the fields you try to manipulate from the job, must be visible for the user used for the salesforce connection (check Field-Level Security in salesforce Setup).
That's for the basics.
Now, what are you trying to do?
It seems you want to update existing records with a field which is probably null before that.
So, the 1rst step is to get the Ids from existing Assets using a tSalesforceInput. This field will be the key for the upsert operation but you can also change for an update as soon you are sure the records exist.
At the same time you need also to get a field which allow you to join these records with those from your input CSV file. If this field doesn't exists, I can't figure out how you expect to retrieve the record to be updated.
From your design, it seems you get records from the Contact object then you move the Contact Ids to the Asset AccountId field. This is not possible as Contact and Account are not the same objects. What you can do is to get AccoundId field from Contact to populate Asset AccountId field but if you just want to update the ID_Externo__c field, you don't nedd the AccountId.
At this stage I can't give you a solution as the objective and the way to get the right data are not well explained, in particular what's in the input file and why the use of Contact object.
TRF