Scope of functions

The d.velop enterprise search app is the main HTTP interface for searching your system landscape.

Using the API function

You will learn how to use the d.velop enterprise search programming interface for your own developments below.

Authentication

Some interfaces from d.velop enterprise search require a valid authentication from d.ecs identity provider.

The API documentation for d.ecs identity provider describes how you can acquire this kind of authentication.

Deploying providers

You can use this function to deploy providers. Providers are systems that can be searched. The providers are displayed in d.velop enterprise search.

The following requirements must be met before your app’s providers can be displayed in d.velop enterprise search:

  • The app must be registered with the http gateway app (only on-premises).
  • The app must deliver a link relation (enterprisesearchfeatures) to the enterprise search configuration.
  • The app must deliver an OpenSearch description for every provider.

In order for d.velop enterprise search to display the providers of your app, your app must deliver a link relation enterprisesearchfeaturesunder the base address to a GET query with the request header "Accept: application/hal+json".

Representation of the resource:

{
  "_links": {
    "enterprisesearchfeatures": {
      "href": string
    }
  }
}
PropertyTypeDescriptionRequired
_linksObjectLink relations with the resources of an appYes
_links.enterprisesearchfeaturesObjectObject that contains a path to the enterprise search configuration of an appYes
_links.enterprisesearchfeatures.hrefStringPath via which the enterprise search configuration should be queriedYes

Below is an example of this kind of response in JSON format:

{
  "_links": {
    "enterprisesearchfeatures": {
      "href": "/exampleapp/enterprisesearchfeatures"
    }
  }
}

Description of the enterprise search configuration

Via the URL href, a JSON object with the following specifications must be returned in the event of a GET query with request header "Accept: application/hal+json".

Representation of the resource:

{
  "name": string,
  "translatedName": map[string]string,
  "iconUrl": string,
  "loginUrl": string,
  "loggedInUrl": string,
  "configUrl": string,
  "provider": [
    {
      "type": "OPENSEARCH",
      "iFrameCompatible": boolean,
      "loginUrl": string,
      "loggedInUrl": string,
      "configUrl": string,
      "iconUrl": string,
      "description": string,
      "activeByDefault": boolean
    },
    {
      "type": "OPENSEARCH",
      "iFrameCompatible": boolean,
      "loginUrl": string,
      "loggedInUrl": string,
      "configUrl": string,
      "iconUrl": string,
      "description": string,
      "activeByDefault": boolean
    }
  ]
}
PropertyTypeDescriptionRequiredComment
nameStringContains the parent name for the provider (e.g. d.3ecm, Google or Microsoft)Yes
translatedNamemapStringStringContains translations for the superordinate name of the providersNoIf there is no corresponding translation, the Name property is used.
iconUrlStringContains the URL for an icon of the appYesURL for an icon with size 32 x 32 pixel in PNG or SVG format.
loginUrlStringContains the URL for a resource that performs the authentication in the external systemNo, optional
loggedInUrlStringContains the URL for a resource that specifies whether the current user is authenticated in the external systemNo, optional
configUrlStringContains the URL for a resource that returns the configuration entriesNo, optional
providerListProvider contains one or more provider objectsYes
provider.typeStringContains the type of provider descriptionYesThe following types of provider descriptions are supported: OPENSEARCH
provider.iFrameCompatibleBooleanSpecifies whether the search results can be displayed in an iFrame (within the ShellApp).Yes
provider.loginUrlStringContains the URL to a resource that performs the authentication in the third-party system. If this URL is specified, the global loginUrl is ignored.No, optional
provider.loggedInUrlStringContains the URL to a resource that indicates whether the current user is authenticated on the third-party system. If this URL is specified, the global loggedInUrl is ignored.No, optional
provider.configUrlStringContains the URL for a resource that returns the configuration entries for a providerNo, optional
provider.iconUrlStringContains the URL for a provider icon If this URL is specified, the icon from description is ignored.No, optional
provider.descriptionStringContains the URL for the OpenSearch description file (.osdx)YesYou can find more information about the structure of the OpenSearch description file [here]
provider.activeByDefaultBooleanSpecifies whether the provider should be automatically available for selection when EnterpriseSearch is first started. This requires a working configuration on the provider's side.No, optional

Below is an example of an enterprise search configuration with a provider.

{
   "name": "Awesome App",
   "translatedName": {
      "de": "Super App",
      "en": "Awesome App"
   },
   "iconUrl": "/exampleapp/path/to/icon-thumbsup.png",
   "loginUrl": "/exampleapp/oauth2/login",
   "loggedInUrl": "/exampleapp/oauth2/loggedIn",
   "configUrl": "/exampleapp/config/features",
   "provider": [
      {
         "type": "OPENSEARCH",
         "iFrameCompatible": true,
         "loginUrl": "/exampleapp/oauth2/login?id=4711",
         "loggedInUrl": "/exampleapp/oauth2/loggedIn?id=4711",
         "configUrl": "/exampleapp/config/features?id=4711",
         "iconUrl": "/exampleapp/static/files/favicon.png",
         "description": "/exampleapp/opensearch/description",
         "activeByDefault": false
      }
   ]
}

Description of the login resource

Via the URL loginUrl, the user must be redirected to the external system in the event of a GET query. The authentication information must be saved in the corresponding app for the current user and used accordingly in a search.

info: The URL is only called if the LoggedIn resource responds with the HTTP status code 401 (UNAUTHORIZED).

Description of the LoggedIn resource

Via the URL loggedInUrl, a check must be performed in the event of a GET query to determine whether the current user has access to the external system. The following return values are allowed:

HTTP status codeDescription
200The user is authenticated and can perform a search in the external system
401The user is not authenticated

Description of the config resource

Via the URL ConfigUrl, a JSON object with the following specifications must be delivered in the event of a GET query with the request header "Accept: application/hal+json".

Representation of the resource:

[
   {
      "caption": string,
      "description": string,
      "href": string,
      "keywords": [string, string, ...],
      "configurationState": number
   }
]
PropertyTypeDescriptionRequiredComment
rootListList of all menu optionsYes
root.captionStringMenu option headingYes
root.descriptionStringDescription of the menu optionYes
root.hrefStringLink to the configuration after the menu optionYes
root.keywordsStringList of keywords that describe the menu option to enable a search for the menu optionNo, optional
root.configurationStateNumberStatus of the configurationYes0: The configuration is complete. 1: The configuration is incomplete and should be completed.

You will find an example of a config resource below.

[
   {
      "caption": "Awesome App configuration",
      "description": "Short description of the configuration",
      "href": "/exampleapp/oauth2/config",
      "keyWords": ["oauth2", "awesome", "login"],
      "configurationState": 0
   }
]

Communicating changes in the search provider configuration

You can use this function to update the search provider listing from within your configuration interface.

Let us assume your configuration option has a status with errors, for example, because connection data is not correct. In this case, the administrator navigates to the configuration interface by choosing Manage search provider. After you have corrected the connection data, you want to reload the search provider listing.

Reloading the search provider - this is how it works

  1. Use the API of the shell app to send a ResourceEvent.
  2. Enter “changed” under Eventname. The URI transmitted must correspond to the currently displayed configuration option.
  3. You can find information about sending ResourceEvents in the API documentation for the Shell app.

Your enterprise search configuration is retrieved again.

Description of the OpenSearch description file (.osdx)

Below provider.description, you must specify a URL that returns an OpenSearch description file.

OpenSearch description file:

<?xml version="1.0" encoding="UTF-8" ?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:sru="http://a9.com/-/opensearch/extensions/sru/2.0/">
    <ShortName>E-Mails</ShortName>
    <Description>Enterprise Search Provider for Mircosoft Exchange (E-Mails)</Description>
    <Url type="application/rss+xml" template="https://wathe02.d-velop.de/exchangeadapter/search/email?q={searchTerms}&amp;p={startPage}&amp;c={count}">Exchange</Url>
    <Url type="application/sru+xml" template="https://wathe02.d-velop.de/exchangeadapter/search/email?q={query}&amp;p={startRecord}&amp;c={maximumRecords}">Exchange</Url>
    <Image>/exchangeadapter/static/images/favicon.png</Image>
</OpenSearchDescription>

Explanation of the properties:

PropertyTypeDescriptionRequired
ShortNameStringShort description of the provider. The user uses this description to decide whether they would like to perform a search in the provider.Yes
DescriptionStringShort explanation of what this provider searches through.No
UrlStringURL template that is called during a searchYes
Url.typeStringOutput format of the search results. application/rss+xml and application/sru+xml are interpreted. The type application/sru+xml must be offered in order to be able to return facets.Yes
Url.templateStringURL that is called during the search. The possible placeholders can be taken from the following table.Yes
ImageStringURL for an icon for the providerNo

Explanation of the placeholders:

PlaceholderDescriptionFormat
{searchTerms}User’s search termapplication/rss+xml
{startPage}Index of the page that should be returned, starting with 1.application/rss+xml
{count}Maximum number of search results that should be returned per page.application/rss+xml
{query}User’s search term in CQL format, including filteringsapplication/sru+xml
{startRecord}Index of the entry (record) that should be returned next, starting with 1.application/sru+xml
{maximumRecords}Maximum number of search results that should be returned per page.application/sru+xml

CQL format

If you offer the format application/sru+xml as an output format, the placeholder {query} is transferred in CQL format. This format uses the facets and search terms that were previously returned to transfer both the user’s search term and additional filterings to you. d.velop enterprise search uses only a small part of the CQL format, which is why it is enough to support the following formats:

  • cql.anywhere=(“<User search term>“)
  • cql.anywhere=(“<User search term>“) and <facetedResults.facet.index>=(“<facetedResults.facet.terms.query>“)
  • cql.anywhere=(“<User search term>“) and <facetedResults.facet.index>=(“<facetedResults.facet.terms.query1>“ or “<facetedResults.facet.terms.query2>“)
  • cql.anywhere=(“<User search term>“) and <facetedResults.facet.index1>=(“<facetedResults.facet.terms.query1>“ or “<facetedResults.facet.terms.query2>“) and <facetedResults.facet.index>=(“<facetedResults.facet.terms.query3>“ or “<facetedResults.facet.terms.query4>“)

The placeholders <facetedResults.facet.index> and <facetedResults.facet.terms.query1> correspond to the values of the search result that was previously returned. You can find additional detailed information about the placeholders here.

Search results in application/rss+xml

Below you will find an example of what a search result in the format application/rss+xml can look like.

<?xml version="1.0" encoding="UTF-8"?>
<rss version="" media="" dvelop="" win="">
    <channel>
        <item>
            <title>Example Title</title>
            <link>https://outlook.office365.com/owa/?ItemID=ITEM-ID</link>
            <description>Short abstract of the result item</description>
            <pubDate>Mon, 16 Sep 2019 12:58:01 UTC</pubDate>
            <thumbnail url="https://provider.org/resultitem.png"></thumbnail>
            <property id="sender" name="Sender" displayValue="richard.roe@mycompany.com" value="richard.roe@mycompany.com">Sender</property>
            <property id="reciever" name="Reciever" displayValue="john.doe@mycompany.com" value="john.doe@mycompany.com">Reciever</property>
            <property id="dvelop_es:IFrameCompatible" name="dvelop_es:IFrameCompatible" displayValue="false" value="false">dvelop_es:IFrameCompatible</property>
            <enclosure type="application/vnd.ms-outlook" url="https://outlook.office365.com/owa/?ItemID=AAMkAGZlZGU4NjdhLTNhNjQtNDkwNC1iMjk3LTU3YzA2MDQxOTU3OQBGAAAAAADWB3I3vPVHT7Za7LDOmNb%2FBwDRZC%2BUns%2BPQ6RauNKrXSp3AAAABS2GAABvU1ftEGTNTaVOlXfj0CFuAAAkGNWEAAA%3D&amp;exvsurl=1&amp;viewmodel=ReadMessageItem" length="">Neues Dokument in Google Drive</enclosure>
        </item>
        ...
    </channel>
</rss>
PropertiesDescriptionRequired
itemOne entry (item) is returned for each result foundNo
item.titleTitle of the result foundYes
item.linkLink to the resultYes
item.descriptionSummary that was created based on the search entry.No
item.pubDateLast editing date of the result in the format RFC 822Yes
item.thumbnailSpecial icon for the result. The provider’s icon is displayed as an alternative.No
item.thumbnail.urlURL for the iconNo
item.propertyListing of all properties of the resultNo
item.property.idID that uniquely identifies the property. You have the option of overriding the view in the new window by using the property dvelop_es:IFrameCompatible.Yes
item.property.nameDescription of the property in the user’s languageYes
item.property.displayValueValue of the property, translated or formatted for the user, if necessaryYes
item.property.valueValue of the propertyYes
item.enclosureAttachment that provides a better description of the result found.Yes
item.enclosure.typeMimeType of the resultYes
item.enclosure.urlLink to the resultYes

Search results in application/sru+xml

Below you will find an example of what a search result in the format application/sru+xml can look like.

<?xml version="1.0" encoding="UTF-8" ?>
<searchRetrieveResponse
    xmlns:ns="http://docs.oasis-open.org/ns/search-ws/diagnostic"
    xmlns="http://docs.oasis-open.org/ns/search-ws/sruResponse" xsi:schemaLocation="http://docs.oasis-open.org/search-ws/searchRetrieve/v1.0/os/schemas/sruResponse.xsd"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <version>1.1</version>
    <numberOfRecords>2</numberOfRecords>
    <records>
        <record>
            <recordData>
                <dc:title>Example Title</dc:title>
                <dc:description>Short abstract of the result item</dc:description>
                <dc:date>2019-09-16T12:58:01Z</dc:date>
                <dc:format>application/vnd.ms-outlook</dc:format>
                <dc:identifier>https://outlook.office365.com/owa/?ItemID=ITEM-ID</dc:identifier>
                <property id="sender" name="Sender" displayValue="richard.roe@mycompany.com" value="richard.roe@mycompany.com">Sender</property>
                <property id="reciever" name="Reciever" displayValue="john.doe@mycompany.com" value="john.doe@mycompany.com">Reciever</property>
                <icon>https://provider.org/resultitem.png</icon>
            </recordData>
        </record>
        ...
    </records>
    <facetedResults
        xmlns="http://docs.oasis-open.org/ns/search-ws/facetedResults" schemaLocation="http://docs.oasis-open.org/ns/search-ws/facetedResults schema.xsd" xsi="http://www.w3.org/2001/XMLSchema-instance">
        <facet>
            <facetDisplayLabel>Sender</facetDisplayLabel>
            <index>Sender</index>
            <terms>
                <term>
                    <actualTerm>richard.roe@mycompany.com</actualTerm>
                    <count>75</count>
                    <query>richard.roe@mycompany.com</query>
                </term>
                <term>
                    <actualTerm>roe.richard@mycompany.com</actualTerm>
                    <count>15</count>
                    <query>roe.richard@mycompany.com</query>
                </term>
            </terms>
        </facet>
        ...
    </facetedResults>
</searchRetrieveResponse>
PropertiesDescriptionRequired
recordOne entry (record) is returned for each result foundNo
record.recordData.dc:titleTitle of the result foundYes
record.recordData.dc:descriptionSummary that was created based on the search entry.No
record.recordData.dc:dateLast editing date of the result in the format RFC 3339Yes
record.recordData.dc:formatMimeType of the resultYes
record.recordData.dc:identifierLink to the resultYes
record.recordData.propertyListing of all properties of the resultNo
record.recordData.property.idID that uniquely identifies the property. You have the option of overriding the view in the new window by using the property dvelop_es:IFrameCompatible.Yes
record.recordData.property.nameDescription of the property in the user’s languageYes
record.recordData.property.displayValueValue of the property, translated or formatted for the user, if necessaryYes
record.recordData.property.valueValue of the propertyYes
record.recordData.iconSpecial icon for the result. The provider’s icon is displayed as an alternative.No
facetedResults.facetOne entry (facet) is returned for each facetNo
facetedResults.facet.facetDisplayLabelDisplay name of the facetYes
facetedResults.facet.indexID of the facetYes
facetedResults.facet.termsListing of the terms for the facetYes
facetedResults.facet.terms.actualTermDisplay name of the current search termYes
facetedResults.facet.terms.countNumber of hits with this search termYes
facetedResults.facet.terms.queryID or technical description for the search termYes

With this function, you can start a search with all providers that are known in d.velop enterprise search and use the results in your app. The search is performed using the format OpenSearch. Learn more about how you can get the OpenSearch description file.

OpenSearch description file

The URL /enterprisesearch/opensearch returns an HTML page that you can use to download the two OpenSearch description files.

Download description file
The link leads to an OpenSearch description file, which you can use according to the format OpenSearch. Alternatively, you can also call the description file directly by querying the following URL:

/enterprisesearch/opensearch/description

Download description file for Windows
The link leads to an OpenSearch description file that uses the d.ecs identity tunnel to cache the cookie. The description file can be used with the format OpenSearch. Use this description file to integrate d.velop enterprise search into your local file explorer. Alternatively, you can also call the description file directly with the following URL:

/enterprisesearch/opensearch/description?identitytunnel=true

Embedding the enterprise search app in third-party applications

You can adjust the display by configuring the following settings so you can easily use d.velop enterprise search from any third-party application.

URL for embedding the enterprise search app

You can use the following URL to embed the company-wide search without a direct search query:

/enterprisesearch/search/

Using parameters to influence the behavior

You can add parameters to the base URL to control the behavior of the embedded company-wide search. The following table contains the possible parameters.

ParameterDescriptionExample
qWith the parameter q, you can transfer a search term that is directly searched for in the company-wide search when the call is made. You need to transfer the search term in URL-coded form./enterprisesearch/search?q=search term
pYou can use the parameter p to limit the providers used to execute the search. You can find the ID of the provider in the provider management./enterprisesearch/search?p=ProviderId
dUsing the parameter d you can limit your search results to a certain time range in advance. The start and end time must be passed in a JSON and encoded as a URL./enterprisesearch/search?d=DateFilterJSON
minimalViewYou can use the parameter minimalView to specify that the display should be lightweight and minimalist. No logo is displayed./enterprisesearch/search?minimalView
hideProviderSelectionYou can use the parameter hideProviderSelection to determine whether the provider selection should be displayed. Possible values: start (the provider selection on the start page is hidden), all (the provider selection on the start page and on the results page is hidden),/enterprisesearch/search?hideProviderSelection=start
newTabWith the parameter newTab, you can specify that the hit list should open in a new tab after a search./enterprisesearch/search?newTab
providerViewUsing the parameter providerView you can specify how the provider selection on the results page is displayed. Possible values: dropdown (default value), smallcards, bigcards/enterprisesearch/search?providerView=bigcards

Example:

/enterprisesearch/search?q=Suchbegriff&p=598238e4ed7df5505cdc9304e3371b88-7f0b4762571d05f45f62e4d43b8f6f05&hideProviderSelection&newTab&minimalView

Options for using the parameter p

You can use the parameter p to specify which provider should be used to execute the search. That way, you determine the specific ID in the configuration interface of the company-wide search:

  1. Navigate to Manage search provider.
  2. Open the context menu of the provider.
  3. Copy the ID.

You can transfer several providers if you use a hyphen as a separator.

/enterprisesearch/search?q={search term}&p={ProviderID1-ProviderID2}

If you want to use all providers for the search, set the parameter p=””.

If you do not specify the parameter p, the company-wide search performs the search using the last user-specific provider selection made by the user.

Using the parameter d

The parameter d requires a JSON with the following properties:

PropertyDescriptionExample
startDefines the start time of the search in ISO-8601 format"2020-08-01T00:00:00.000Z"
endDefines the end time of the search in ISO-8601 format"2020-09-30T23:59:59.999Z"

Start time must be before the end time.

Adding own functions

Extension points give you the option or adding your own functions to d.velop enterprise search. For example, you can add context actions to the detail view.

Preparing your app

So that extensions for context actions are found, your app must provide an interface, which you will learn about below. d.velop enterprise search uses the HTTP GET request concept for the root resource (systemBaseUri path with the app name) of apps that provide extensions. All apps that are registered in the HttpGateway app are queried.

Providing the URL for extensions

The administrator can manually update root resources of apps on the page /enterprisesearch/extensions. An app’s response is checked in terms of the link relation enterprisesearchextensions. This link relation is a signal that the app offers extensions for d.velop enterprise search. d.velop enterprise search executes an HTTP GET query for the specified links and expects a normed JSON object with the HTTP status code 200 from the responding app.

Request

GET /myapp/
Accept: application/hal+json

Response

HTTP/1.1 200 OK
Content-Type: application/hal+json

{
    "_links" : {
        "enterprisesearchextensions" : {
            "href" : "/myapp/enterprisesearchextensions"
        }
    }
}

Displaying extension points

You can display the registered extension points. To do so, call the URL /enterprisesearch/extensions in the browser.

Request

GET /enterprisesearch/extensions
Accept: text/html

Adding context actions to the detail view

You can add context actions to the detail view for a search result. These context actions are also summarized for a search result in the menu for context actions. The app that wants to provide an extension must return an HTTP response in JSON format under the link relation enterprisesearchextensions. The following information must be provided for every context action:

  • Context of the extension point: ESObjectDetailsContextAction
  • Activation conditions for displaying the context action
  • Display name of the context action in the available translations
  • Link to the symbol of the context action
  • The action that should be executed if the user has clicked on the context action. This is where you need to specify a relative link that is called by d.velop enterprise search via HTTP GET.

Example The example shows how you can structure the HTTP response of the link relation enterprisesearchextensions to add a context action using an extension point ESObjectDetailsContextAction. You define different properties for every context action.

{
    "extensions": [
    {
        "id": "myapp.openExternalApp",
        "activationConditions": [{
            "propertyId": "mimetype",
            "operator": "or",
            "values": ["application/pdf","image/jpeg"]
        }],
        "captions": [{
            "culture": "de",
            "caption": "Externe Applikation öffnen"
        },
        {
            "culture": "en",
            "caption": "Open external application"
        }],
        "context": "ESObjectDetailsContextAction",
        "uriTemplate": "/myapp/dosomething?id={esobject.attributes.document_id}",
        "iconUri": "/myapp/images/goto.png",
        "openInNewWindow": true
    }]
}
PropertyTypeDescriptionRequired
idStringStipulate the unique technical name that is used to differentiate the extension from other extensions.Yes
activationConditionsObject arrayFor every extension, the application communicates the activation conditions under which the context action should be displayed. A context action is displayed when all individual conditions apply. If the list of activation conditions does not contain an entry, the extension is generally active. Enter the activation conditions as an array.No
activationConditions.propertyIdStringSpecifies the property for which the activation condition is checked. You can find possible values further below.Yes
activationConditions.operatorStringSpecifies how an individual condition is evaluated. You can choose the following operators: or: A ´or´ condition is fulfilled if the current value of the property corresponds to one of the values. Capitalization is not considered. notOr: A notOr condition is fulfilled if the current value of the property does not correspond to any of the values. Capitalization is not considered.Yes
activationConditions.valuesString arraySpecifies the values in the form of an array, and they are compared with the value of the propertyId.Yes
captionsObject arrayEvery context action communicates the name under which the context action is displayed. You can also consider different languages. If you do so, you need to specify the language-dependent names as an array. Enter the translation for the following languages so the language packages are completely compatible: cs (Czech), da (Danish), de (German), en (English), es (Spanish), fr (French), hr (Croatian), it (Italian), nl (Dutch), pl (Polish), sr (Serbian)Yes
captions.cultureStringSpecifies the language of the context action. The information contains the language code (e.g., en) and, optionally, an additional region code (e.g., en-GB).Yes
captions.captionStringSpecifies the language-dependent name of the context action.Yes
contextStringSpecifies the desired extension point to which the context action should be added. Enter the following value for the detail view for context actions: ESObjectDetailsContextActionYes
uriTemplateStringDefines the URL that should be called when the user clicks on the context action. You can define placeholders to receive additional information about the current context. The actual properties replace the placeholders when the extension is called. The properties are transferred to the URI in URL-coded form. You can find possible placeholders further below.Yes
iconUriStringSpecifies the link to the symbol displayed for the context action. The file for the symbol must be in PNG format.Yes
openInNewWindowBooleanSpecifies whether the context action can be opened within d.3one (false) or whether a new window must be opened for it (true). false is configured by default.No

You can use the following values to define context actions for the detail view in the following areas:

  • A: Definition of activation conditions for the property propertyId
  • P: Defining placeholders in the property uriTemplate
SubjectValueUsageDescription
Providerprovider.idA/PID of the search provider. The ID can be queried from the resource /enterprisesearch/provider.
Providerprovider.nameA/PName of the search provider, e.g. (productive system). The name can be queried from the resource /enterprisesearch/provider.
Providerproviderconfig.idA/PID of the provider configuration. The ID can be queried from the resource /enterprisesearch/provider.
Providerproviderconfig.nameA/PName of the provider configuration, e.g., d.3 ecm. The name can be queried from the resource /enterprisesearch/provider.
Useruser.idp.group_idA/PActivation condition: GUID of a user group of the identity provider app in which the user who is currently logged on is a member. Placeholder uriTemplate: List of the GUIDs of the user groups of the identity provider app in which the user who is currently logged on is a member as an array in JSON format.
Element propertiesesobject.titleA/PSearch result title
Element propertiesesobject.mime_typeA/PMIME type of the search results (e.g. image/jpeg or application/vnd.ms-outlook).
Element propertiesesobject.datePLast change date of the search result in the format RFC822.
Element propertiesesobject.linkPLink to the search result
Element propertiesesobject.iframe_compatibleA/PContains information about whether the search result can be displayed in an IFrame. Only the first value entered is considered.
Element propertiesesobject.attributes.<attributeId>A/PValue of the attribute with the ID <attributeId>

Manually adding extension points

By making the following HTTP calls, you can manually add, edit or remove an extension.

Add

POST /enterprisesearch/extensions
Accept: application/json
Body:
{
    "id": "myapp.openExternalApp",
    "activationConditions": [{
        "propertyId": "mimetype",
        "operator": "or",
        "values": ["application/pdf","image/jpeg"]
    }],
    "captions": [{
        "culture": "de",
        "caption": "Externe Applikation öffnen"
    },
    {
        "culture": "en",
        "caption": "Open external application"
    }],
    "context": "ESObjectDetailsContextAction",
    "uriTemplate": "/myapp/dosomething?id={esobject.attributes.document_id}",
    "iconUri": "/myapp/images/goto.png",
    "openInNewWindow": true
}

Edit

PUT /enterprisesearch/extensions/<extension.id>
Accept: application/json
Body:
{
     "id": "myapp.openExternalApp",
     "activationConditions": [{
         "propertyId": "mimetype",
         "operator": "or",
         "values": ["application/pdf","image/jpeg"]
     }],
     "captions": [{
         "culture": "de",
         "caption": "Externe Applikation öffnen"
     },
     {
         "culture": "en",
         "caption": "Open external application"
     }],
     "context": "ESObjectDetailsContextAction",
     "uriTemplate": "/myapp/dosomething?id={esobject.attributes.document_id}",
     "iconUri": "/myapp/images/goto.png",
     "openInNewWindow": true
}

Remove

DELETE /enterprisesearch/extensions/<extension.id>
Accept: application/json