Creatio offers a few different options for accessing data via an API. There is the DataService API and an OData API. To make things slightly more confusing there are two different OData APIs, one that implements OData 3 and another that implements OData 4. However, when using the OData APIs, the type of package that the object you’re attempting to work with exists in does make a difference.
Creatio OData APIs
As I mentioned earlier, Creatio has two OData APIs, one that implements the OData 3 specification and another that implements OData 4. If you’re using a Creatio OData API and you’re not sure which one you’re using, the OData 3 API is implemented by the EntityDataService.svc, so you’ll see that in the URL. The URLs for these do appear different:
OData 3 URL to access the Accounts collection
OData 4 URL to access the Accounts collection
Creatio Package Types
Why does it matter whether you’re using the OData3 API or the OData4 API? It matters because the type of package the object you’re reading is in makes a difference whether you can access the object in one or the other. Creatio has different package types, Simple packages (what you’ve had all along), Project Package (which is identical to a simple package except it has it’s own C# csproj and can have a Files folder where additional file sources can be used, typically created using clio), and an Assembly Package. Assembly packages were introduced in Creatio 7.18.3. What makes an Assembly Package different than a Project Package is that the assembly package gets compiled into it’s own DLL, so when you publish something in an assembly package, only that package gets compiled instead of the entire configuration.
You can tell if your package is an assembly package if the package has the “compile into a separate assembly” option checked:
Now, back to how this ties in with accessing objects via the Creatio OData API.
If the object you’re attempting to read via OData exists in a package that is an assembly package, you cannot access the object via the OData 3 API. You can only use the OData 4 API.
From the documentation on assembly packages:
Object access is not supported via the OData protocol version 3. Use the OData protocol version 4 to access objects in an assembly package.
OData4 is newer in Creatio (previously only the OData 3 API was available). This means, if you have an older application that was created to use the OData 3 API and you create a new package that is an assembly package, the application will not be able to access the objects in this new package.
Note, that in current versions of Creatio, assembly packages are the default, meaning the “compile into a separate assembly” option defaults to checked (you can uncheck if needed).