webservice
url
file
integration
Studio_Creatio
8.0

Hello. 

 

I'm doing an Web services to send a document to sign, the api request the Url of the document so I'm using the following link https:[creatio instance]/0/rest/FileService/GetFile/70ec5d9f-a55e-4f5c-8f59-30d2c5149c4a/ef68e95e-ef77-eddf-dfa8-685557ee4875

 

70ec5d9f-a55e-4f5c-8f59-30d2c5149c4a correspons to the  UId from the SysSchema table where the attachments are stored and the ef68e95e-ef77-eddf-dfa8-685557ee4875 is the Id of the attachment. This URL allows me to dowloand the document to my computer, so I know that is the right link but when I used it in the web service it says that there is no document. 

 

The json of the request is the following 

{
 
    "url_doc": {
 
        "url": "https://151929-crm-bundle.creatio.com/0/rest/FileService/GetFile/70ec5d9f-a55e-4f5c-8f59-30d2c5149c4a/ef68e95e-ef77-eddf-dfa8-685557ee4875",
 
        "name": "Contrato.pdf"
 
    },
 
    "stickers": [
 
        {
 
            "authority": "Vinculada a Correo Electronico por Liga",
 
            "stickerType": "line",
 
            "dataType": "email",
 
            "email":"laura@artica.digital",
 
            "data": "laura@artica.digital",
 
            "imageType": "stroke",
 
            "page": 0,
 
            "rect": {
 
                "lx":74.88173,
 
               "ly":312.32596,
 
               "tx":196.9875,
 
               "ty":373.37885
 
            }
 
        }
 
    ]
 
}

 

When I sent the request the response is 

 

{
    "error": "No document"
}

 

I had try this request with a Dropbox URL and works fine but I need to send the documents that are generated by the Word Reports. That why I'm trying to get the document from Creatio using the URL the API also gives me the option of sending the document using base64 but I dont know how to convert the file easly. 

 

Can you help me please to know what is happenig? 

Thank you

Like 0

Like

4 comments

The reason why this isn't working is because FileService/GetFile requires authentication to read. This is not an anonymous endpoint. The receiver of this, where ever you're sending this URL of the document to, is actually getting a 401 Unauthorized. 

You'd have to either go the route of sending the base64 of the file, or expose an anonymous service in Creatio to provide the file to the other service.

Ryan

Ryan Farley,

Thank you, can you explain me please how can I convert the file to base64 please, I had see some examples but I not sure if I can do it using a script task in a business process or a source code 

Laura Jurado,

The code would look something like this (not tested, but this should get you started). For this, I have two process params, one a uniqueidentifier AccountFileId (an Id of an account file) and second an unlimited text AccountFileBase64. The script task would look something like this:

var fileId = Get<Guid>("AccountFileId");
 
var entity = UserConnection.EntitySchemaManager.GetInstanceByName("AccountFile").CreateEntity(UserConnection);
if (entity.FetchFromDB(fileId))
{
    var base64FileData = Convert.ToBase64String(entity.GetBytesValue("Data"));
    Set("AccountFileBase64", base64FileData);
}

Ryan

Ryan Farley,

Thank you very much. It helped me a lot 

Show all comments

Getting dateformat error during deserialization when calling a custom web service with the following JSON request:


{
  "ResultDate": "\"2000-01-01T00:00:00.000\""
}
The error message states:

The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:entity... "DateTime content '"2000-01-01T00:00:00.000"' does not start with '/Date(' and end with ')/' as required for JSON.' Please see InnerException for more details. See server logs for more details. The exception stack trace is: ...

Is there any way to pass a date in the "\"2000-01-01T00:00:00.000\"" format instead of using /Date(1511448000000)/

Like 0

Like

1 comments

Hello,

According to the given information, this article may be helpful:

https://stackoverflow.com/questions/44227653/content-date-does-not-start-with-date-and-end-with-as-requi

Also, you can write a DateTime to Unix timestamp converter and then extract the value:

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp )
{
    DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
    dateTime = dateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dateTime;
}

Best regards,

Anhelina!

Show all comments

Hi all,

I need to process files attached to a record, and i am using the process file element to get access to those files. I need to get the files itself in a process parameter, so i can manipulate them in a c# script task.  But i see no way how i can get the file or files collection retrieved by the process element in a process parameter.  What am i missing?

 

Greetings,

 

Vincent

Like 0

Like

3 comments

You can generate the printable doc via code as well, then use the file  bytes. See https://customerfx.com/article/running-a-word-printable-in-a-process-script-task-and-add-as-attachment-on-a-record-in-bpmonline/

The report.Data in that code sample will give you the bytes of the file itself.

Ryan

Thanks for the reply, but it's not what I'm looking for.  The documentation of the process file element says:

What to do with file? – select one of the following options:

  1. Use in process” if you need to use the file records in the process itself without saving the files to any Creatio object or if you need to pass the files to a different business process as a parameter.


My question is: how can i pass that file(collection) to a different business process (or a script taks). ..

Hello,

 

Essentially, the process file element works with collections of records. For example, when reading object attachments from a specific record, there can be more than one attachment.

Therefore, if we need to work with this data further in a script or another process, we should handle collections of files.

For instance, if we have read some attachments and selected the 'use in process' option, we can pass the file from the collection to a subprocess with a File parameter.

 In the subprocess, this file can then be accessed through the parameter.

 

 

 

 

Show all comments
FreedomUI
tile_view
grid
Studio_Creatio
8.0

Hi can anyone help to build a tile view in freedom ui , I wanted to recreate the grid view that was present in classic ui .

Like 1

Like

1 comments
Best reply

Hello,

Unfortunately, a tile view currently cannot be recreated in Freedom UI, and there is no option to display the images on the list page. We have registered a request with the responsible development team, and this team is working on adding this functionality in future releases.
 

Hello,

Unfortunately, a tile view currently cannot be recreated in Freedom UI, and there is no option to display the images on the list page. We have registered a request with the responsible development team, and this team is working on adding this functionality in future releases.
 

Show all comments
GHierarchyViewGeneratorV2
ViewModuleWrapper
Studio_Creatio
8.0

Hello Creatio Community,

I'm encountering several script errors while using Creatio, as shown in the attached screenshot. The errors appear to be related to the following components:

  1. GHierarchyViewGeneratorV2:
    • Script error on line 9.
    • Error related to GHierarchyViewGeneratorV2.
  2. GHierarchicalGridUtilitiesV2:
    • Uncaught error for GHierarchicalGridUtilitiesV2.
  3. ViewModuleWrapper:
    • Uncaught error for ViewModuleWrapper.

These errors seem to be occurring consistently, preventing me from loading specific modules. I've tried refreshing the page and clearing the cache, but the issue persists.

Has anyone else encountered these errors, and if so, what steps did you take to resolve them? Any insights or suggestions would be greatly appreciated.
Screenshot:

 


Thank you in advance for your assistance!

Like 0

Like

1 comments

Hello,

Script Errors mean there are some issues with the code in a specific schema. In order to fix it we recommend asking the developers of the set schema so that they can check if there are any errors in the code.

Show all comments
#8.1
#development
Studio_Creatio
8.0

Hi,

 

Is it possible to set a title for a column in a DataGrid dynamically via client code?

 

I tried the following steps:

  1. Add an attribute to viewModelConfigDiff called "InspectorsSundayCaption".

 

            viewModelConfigDiff: /**SCHEMA_VIEW_MODEL_CONFIG_DIFF*/[
            {
                "operation": "merge",
                "path": [
                    "attributes"
                ],
                "values": {
                   "InspectorsSundayCaption":{
                   },

            ......}

 

  2. Bind the attribute to the caption property of column

                       {
                            "id": "aaa335c2-8291-0f65-e930-e39ca7e333a7",
                            "code": "DataGrid_244wb6vDS_UsrwpPoliceCarsSunday",
                            "path": "UsrwpPoliceCarsSunday",
                            "caption":"$InspectorsSundayCaption2",
                            "dataValueType": 4
                        },

 

  3. Set the attribute in the HandleViewModelInitRequest handler with the specific value.

 

    {
                request: "crt.HandleViewModelInitRequest",
                  handler: async (request, next) => {

                           .....

                           request.$context.InspectorsSundayCaption = "Sunday inspectors " + sundayDateStr;

                           await next?.handle(request);

}

 

This way work to me in normal column caption, But it doesn't work in a DataGrid column

 

Is there any limitation/step I'm missing?

 

Thanks in advance for your assistance!
Rachel
 

 

Like 0

Like

2 comments

Hi,
Does anyone have an idea?

Hello Rachel Markovski,

I have contacted our R&D team in order to help find a solution for your problem. The answer is unfortunate - currently there is no mechanism to dynamically change column caption in the datagrid component. 

Hope this helps.

Show all comments
handlers
Studio_Creatio
8.0

Hello,

I need to create a custom handler for a button. It is necessary that after the button is clicked, two actions are performed sequentially: first, the record should be saved, and then a process should be triggered. My code isn't working. Could you please help?

 

        handlers: /**SCHEMA_HANDLERS*/[
 {        
     request: "crt.CustomHandler",
     handler: async (request, next) => {
   const result = await next?.handle(request);
   const handlerChain = sdk.HandlerChainService.instance;
   // Спочатку зберігаємо дані
   await handlerChain.process({
       type: 'crt.SaveRecordRequest',
       $context: request.$context,
       dataSourceName: "PDS"
   });
   // Потім викликаємо процес
   await handlerChain.process({
       type: 'crt.RunBusinessProcessRequest',
       $context: request.$context,
       processName: "srProcess_5c65949",
       processRunType: "ForTheSelectedPage",
       showNotification: true,
       recordIdProcessParameterName: "ID"
   });
   return result;
}
}
]/**SCHEMA_HANDLERS*/,
Like 0

Like

2 comments
Best reply

Ігор Роїк,

Hello,

Have you tried importing a "creatio-devkit/common dependecies" as well as passing sdk as a parameter to your schema function? 1

 message: Uncaught Error: Uncaught (in promise): ReferenceError: sdk is not defined
ReferenceError: sdk is not defined

Ігор Роїк,

Hello,

Have you tried importing a "creatio-devkit/common dependecies" as well as passing sdk as a parameter to your schema function? 1

Show all comments

How to change the status of the Progress bar Page based on the activity status

Like 0

Like

1 comments

Hey guys,

 

How can I close the navigation sidebar programmatically?

 

I'm trying to implement the same behavior that happens when you press the button indicated in the image below, making the main navigation bar to hide, so I can give users more width space for the section form screen without them to having to do that.

 

 

I tried with something like this based on what I saw somewhere in the code, but is not working for me.
 

const closeSidebarRequest = { 
	type: "crt.NavigationPanelChangeVisibleRequest", 
	$context: request.$context, 
	isVisible: false 
	};
 
await request.$context.executeRequest(closeSidebarRequest);

 

 

Thanks!

 

 

 

Like 0

Like

3 comments

Hello Andres,
Thank you for your question.

I am a bit confused as I do not understand the business need for this customization. Could you please clarify if this is a necessity? From my point of view, this feature is a bit of an overkill. First of all, there is already a button to control whether or not the navbar is shown. If the user wants to have control over seeing the navbar, and you implement an additional way to do so (for example, another button), then you will have two buttons for the same task. Secondly, I think that calling crt.NavigationPanelChangeVisibleRequest will not help.


I will be glad to assist you if you need to implement this functionality. I am curious about how you plan to control the visibility of the navbar.

Hi Yevhenii, 


In our case users are mostly working on one section and do not move from there. I'd like to hide the navbar by default when they enter to creatio and as you said, in case they need to navigate outside of that section they can open it with the button thats already there.

 

Is there any way to hide the navbar by default for all users? That is what I'm trying to accomplish, not another button.

 

Thanks,

Andres

Hello Andres,

I have come up with a solution that might help. When the user navigates to the application, the left panel is hidden/collapsed by default. If the user wants the left panel to be visible, they can click on the top-left button to show the navigation panel. To do this, I replaced the MainShell schema with the following code:
 

define("MainShell", /**SCHEMA_DEPS*/["@creatio-devkit/common"]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
   return {
       viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
       ]/**SCHEMA_VIEW_CONFIG_DIFF*/,
       viewModelConfig: /**SCHEMA_VIEW_MODEL_CONFIG*/{
           attributes: {
           }}/**SCHEMA_VIEW_MODEL_CONFIG*/,
       modelConfig: /**SCHEMA_MODEL_CONFIG*/{}/**SCHEMA_MODEL_CONFIG*/,
       handlers: /**SCHEMA_HANDLERS*/[
           {
               request: 'crt.HandleViewModelInitRequest',
               handler: async (request, next) => {
                   const viewModel = request.$context;
                   viewModel["WorkplaceNavigationPanelVisibleAttribute"] = false;
                   return next?.handle(request);
               }
           },
           ]/**SCHEMA_HANDLERS*/,
       converters: /**SCHEMA_CONVERTERS*/{}/**SCHEMA_CONVERTERS*/,
       validators: /**SCHEMA_VALIDATORS*/{}/**SCHEMA_VALIDATORS*/,
   };
});

 

Hope this will help you.

Show all comments

Hey guys,

 

How can I close the navigation sidebar programmatically?

 

I'm trying to implement the same behavior that happens when you press the button indicated in the image below, making the main navigation bar to hide, so I can give users more width space for the section form screen without them to having to do that.

 

 

I tried with something like this based on what I saw somewhere in the code, but is not working for me.
 

const closeSidebarRequest = { 
	type: "crt.NavigationPanelChangeVisibleRequest", 
	$context: request.$context, 
	isVisible: false 
	};
 
await request.$context.executeRequest(closeSidebarRequest);

 

 

Thanks!

 

 

 

Like 0

Like

0 comments
Show all comments