2016-08-06 1 views
1

Есть ли способ создать «временный» (или, я предполагаю, это называется виртуальный) глубокий объект с использованием oModel.createEntity()?Как создать глубокую сущность с oModel.createEntry

У меня есть сущность, называемая расписанием, с объединением, которое ломается, называется ToBreaks.

Теперь я хочу создать новую сущность во внешнем интерфейсе, используя oModel.createEntity("/TimesheetSet").

К сожалению, в так называемой виртуальной новой записи все мои ассоциации отсутствуют. Поскольку я использую советы для привязки таблиц, после создания виртуальной новой записи инициируется обратный вызов TimesheetSet("id-04-123456789")/ToBreaks, что приводит к ошибке «неверный ключевой предикат».

Есть ли способ сделать это с помощью OData V2?

Update 09.08.2016:

Вы все еще можете попробовать только с помощью параметра свойств с вложенным набором сущностей. До тех пор пока ваша служба OData поддерживает соответствующие глубокие создания, он должен работать:

Я также пытался что-то вроде этого:

oModel.createEntry("/TimesheetEntry", { 
    Pernr: sPernr, 
    Begda: dBegda, 
    ToBreaks: [{ 
     Pernr: sPernr, 
     Begda: dBegda 
    }] 
}); 

ToBreaks это имя ассоциации.

В виртуальной записи OData-Model свойства для ассоциаций все еще отсутствуют. Я могу создать новую запись, используя приведенный выше код, но впоследствии нет свойства, называемого ToBreaks

На стороне бэкэнда я последовал этому руководству по внедрению метода deep_create: step-by-step-development-guide-for-createdeepentity-operation. Я могу вызвать метод из клиента SAP Gateway.

ответ

0

Да, вы можете выполнить глубокое создание сущности с помощью oData V2. Для этого вам нужно создать тело запроса в соответствии со структурой вашего метаданных. Предположим, что ваша модель метаданных Пользователь и каждый пользователь имеет несколько Связь. Таким образом, у нас есть пользовательский объект и объект связи. У нас также есть объединение fromUserToCommunications и навигации собственности назовём это Communications

Для того, чтобы выполнить вызов глубоко создать пользователя лица, вам необходимо сделать следующее:

// Create the oData Model 
var oModel = new sap.ui.model.odata.ODataModel("{YOUR_SERVICE_DOCUMENT_URL}"); 


// Create the user request body, please make sure that 
// all required fields are filled in and are according to the 
// user entity metadata 
var userRequestBody = { 
    id: "123", 
    firstName: "Your First Name", 
    lastName: "Your Last Name", 
    address: "Your Address", 
    communications: [] // contain multiple communications 
}; 

var comm1 = { 
    id : "1", 
    userId : "123", // foregin key to the user entity 
    homePhone: "+134342445435" 
}; 

var comm2 = { 
    id : "2", 
    userId : "123", // foregin key to the user entity 
    homePhone: "+134342445436" 
};  

// add the communications to the user entity 
userRequestBody.communications.push(comm1); 
userRequestBody.communications.push(comm2); 

oModel.create("/UserCollection",userRequestBody,{ 
    success: function(result){ 
     // everything is OK 
    }, 
    error: function(err){ 
     // some error occuerd 
    }, 
    async: true, // execute async request to not stuck the main thread 
    urlParameters: {} // send URL parameters if required 
}); 
+0

Благодарим за отзыв, но это вызывает глубокое создание на бэкэнд-системе. Я пытаюсь создать глубокую виртуальную сущность во внешнем интерфейсе, используя 'oModel.createEntry()' – srz

+0

Если вы вызываете createEntity вместо создания, это работает? –

+0

Я уже пробовал это, но не смог запустить его. Я попробую еще раз в выходные. Благодарю. – srz

2

От API docs:

Обратите внимание: глубокие создания (включая данные, определяемые навигацией операторы) не поддерживаются.

Вы все еще можете попробовать, используя параметр properties с вложенным набором объектов.Пока ваша служба OData поддерживает соответствующее глубокое создание, она должна работать:

Свойства могут быть объектом, который включает в себя требуемые свойства и значения, которые должны использоваться для созданной записи.