У меня есть столбец назначения ресурсов на моем Gantt. Я могу изменить назначение, но я хочу знать, как их сохранить? Также я могу изменить единицу измерения по умолчанию, равную процентному количеству часов.Как сохранить назначения ресурсов на Gantt Bryntum?
ответ
Прочитайте немного о CrudManager, который занимается загрузкой и сохранением данных. У этой ссылки есть все, что вам нужно.
http://www.bryntum.com/docs/scheduling/3.x/?#!/guide/gantt_crud_manager
Введение
В этом руководстве описывается, как использовать менеджер CRUD с Ext Ганта. Он содержит только детали Ганта. Для получения общей информации о реализации и архитектуре менеджера CRUD см. Это руководство.
Класс, реализующий CRUD-менеджер для Ext Gantt, называется Gnt.data.CrudManager. Он использует AJAX в качестве транспортной системы и JSON в качестве формата кодирования. Преимущества использования менеджера CRUD
В предыдущих версиях Ext Gantt вам приходилось загружать и сохранять данные, используя стандартный пакет данных Ext JS. Это потребует установки прокси-серверов в хранилищах данных и обработки загрузки и сохранения в каждом таком хранилище. Такой подход работал, но имел несколько недостатков:
To load data into the Gantt, you had to deal with each store separately. In the worst case, this could mean about 4-5 ajax requests to load the Gantt chart (Tasks, Dependencies, Resources, Assignments, Calendars) depending on which features you used.
Hard to use database transactions on the server side.
По соображениям производительности obvisously мы хотели бы процесс загрузки, чтобы использовать один запрос, который возвращает данные, которые будут потребляться всеми магазинами, используемых в диаграмме Ганта , Это теперь легко достичь, поскольку CM загружает данные по одному запросу. Когда дело доходит до сохранения изменений, вы обычно хотите иметь «все или ничего» на основе транзакций подход к постоянным обновлениям в вашей базе данных. Это невозможно, если вы используете два отдельных запроса ajax. Магазины
В Ext Gantt используется несколько разных объектов данных: календари, ресурсы, назначения, зависимости и задачи. Чтобы зарегистрировать их с помощью экземпляра Gnt.data.CrudManager, следует использовать следующие конфигурации: calendarManager, resourceStore, assignStore, dependencyStore, taskStore.
Вот как базовая конфигурация будет выглядеть:
var crudManager = new Gnt.data.CrudManager({
autoLoad : true,
calendarManager : calendarManager,
resourceStore : resourceStore,
dependencyStore : dependencyStore,
assignmentStore : assignmentStore
taskStore : taskStore,
transport : {
load : {
url : 'php/read.php'
},
sync : {
url : 'php/save.php'
}
}
});
Бэкэнд, в этом случае «read.php» должен возвращать JSON похож на один замеченный ниже:
{
"success" : true,
"dependencies" : {
"rows" : [
{"Id" : 1, "From" : 11, "To" : 17, "Type" : 2, "Lag" : 0, "Cls" : "", "LagUnit" : "d"},
{"Id" : 2, "From" : 12, "To" : 17, "Type" : 2, "Lag" : 0, "Cls" : "", "LagUnit" : "d"},
{"Id" : 3, "From" : 13, "To" : 17, "Type" : 2, "Lag" : 0, "Cls" : "", "LagUnit" : "d"}
]
},
"assignments" : {
"rows" : [
{
"Id" : 1,
"TaskId" : 11,
"ResourceId" : 1,
"Units" : 100
},
{
"Id" : 2,
"TaskId" : 11,
"ResourceId" : 2,
"Units" : 80
}
]
},
"resources" : {
"rows" : [
{"Id" : 1, "Name" : "Mats" },
{"Id" : 2, "Name" : "Nickolay" },
{"Id" : 3, "Name" : "Goran" }
]
},
"tasks" : {
"rows" : [
{
"BaselineEndDate" : "2010-01-28",
"Id" : 11,
"leaf" : true,
"Name" : "Investigate",
"PercentDone" : 50,
"TaskType" : "LowPrio",
"StartDate" : "2010-01-18",
"BaselineStartDate" : "2010-01-20",
"Segments" : [
{
"Id" : 1,
"StartDate" : "2010-01-18",
"Duration" : 1
},
{
"Id" : 2,
"StartDate" : "2010-01-20",
"Duration" : 2
},
{
"Id" : 3,
"StartDate" : "2010-01-25",
"Duration" : 5
}
]
},
{
"BaselineEndDate" : "2010-02-01",
"Id" : 12,
"leaf" : true,
"Name" : "Assign resources",
"PercentDone" : 50,
"StartDate" : "2010-01-18",
"BaselineStartDate" : "2010-01-25",
"Duration" : 10
},
{
"BaselineEndDate" : "2010-02-01",
"Id" : 13,
"leaf" : true,
"Name" : "Gather documents (not resizable)",
"Resizable" : false,
"PercentDone" : 50,
"StartDate" : "2010-01-18",
"BaselineStartDate" : "2010-01-25",
"Duration" : 10
},
{
"BaselineEndDate" : "2010-02-04",
"Id" : 17,
"leaf" : true,
"Name" : "Report to management",
"PercentDone" : 0,
"StartDate" : "2010-01-30",
"BaselineStartDate" : "2010-01-29",
"Duration" : 0
}
]
}
}
Не следует указывать конфигурации calendarManager, resourceStore, dependencyStore и assignStore, если они уже указаны для экземпляра хранилища задач. В этом случае менеджер CRUD будет просто взять их из предоставленного экземпляра магазина задачи:
var taskStore = new Gnt.data.TaskStore({
calendarManager : calendarManager,
resourceStore : resourceStore,
dependencyStore : dependencyStore,
assignmentStore : assignmentStore
});
var crudManager = new Gnt.data.CrudManager({
// Specifying TaskStore only
taskStore : taskStore,
transport : {
load : {
url : 'php/read.php'
},
sync : {
url : 'php/save.php'
}
}
});
Вы можете предоставить любое количество дополнительных магазинов с использованием магазинов CONFIG:
варом crudManager = новый Gnt.data. CrudManager ({ taskStore: taskStore, магазины: [store1, store2, store3], транспорт: { нагрузка: { URL: 'PHP/read.php' }, синхронизации: { URL: «PHP/спасти.php ' } } });
Или добавить их программно с помощью метода addStore:
crudManager.addStore([ store2, store3 ]);
Реализация
Вот как менеджер CRUD может быть создан:
var crudManager = new Gnt.data.CrudManager({
autoLoad : true,
taskStore : taskStore,
transport : {
load : {
url : 'php/read.php'
},
sync : {
url : 'php/save.php'
}
}
});
В приведенном выше примере данных, тем операция загрузки начнется автоматически, так как CM настроен с параметром autoLoad, установленным в true. Существует также метод загрузки для вызова загрузки вручную:
crudManager.load(function (response) {
alert('Data loaded...');
})
Чтобы сохранить изменения автоматически, есть возможность AUTOSYNC, и вы, конечно, можете также вызвать метод синхронизации вручную, если это необходимо:
crudManager.sync(function (response) {
alert('Changes saved...');
});
Любые экземпляры Gnt.panel.Gantt могут быть настроены на использование CRUD-менеджера, предоставляя конфигурацию crudManager. В этом случае вам не нужно указывать объекты taskStore, dependencyStore, resourceStore, assignStore на панели Gantt. Они будут взяты из предоставленного экземпляра crudManager.
new Gnt.panel.Gantt({
viewPreset : 'dayAndWeek',
startDate : new Date(2014, 0, 1),
endDate : new Date(2014, 1, 1),
width : 800,
height : 350,
// point grid to use CRUD manager
crudManager : crudManager
columns : [
{
xtype : 'namecolumn'
},
{
xtype : 'startdatecolumn'
}
]
});
Календари
Gnt.data.CrudManager поддерживает массовую загрузку всех календарей проекта в проект. Чтобы это сделать, необходимо указать конфигурацию Gnt.data.CrudManager.calendarManager или ее можно указать в хранилище задач.
var calendarManager = Ext.create('Gnt.data.CalendarManager', {
calendarClass : 'Gnt.data.calendar.BusinessTime'
});
...
var taskStore = Ext.create('Gnt.data.TakStore', {
// taskStore calendar will automatically be set when calendarManager gets loaded
calendarManager : calendarManager,
resourceStore : resourceStore,
dependencyStore : dependencyStore,
assignmentStore : assignmentStore
});
var crudManager = Ext.create('Gnt.data.CrudManager', {
autoLoad : true,
taskStore : taskStore,
transport : {
load : {
url : 'php/read.php'
},
sync : {
url : 'php/save.php'
}
}
});
отклик нагрузки структура отклика нагрузки
календаря менеджер имеет немного более сложную структуру, чем описанный общий.
Первое отличие от стандартного ответа заключается в том, что для каждого календаря мы включаем его данные в поле Дни. Объект в поле «Дни» имеет ту же структуру, что и любой другой объект, содержащий данные хранилища. В нем есть строки, содержащие массив записей календаря (каждый из них представляет экземпляр Gnt.model.CalendarDay), а общее число определяет их количество.
Еще одна вещь, о которой стоит обратить внимание, заключается в том, как метаданные используются для загрузки менеджера календарей. Он имеет свойство projectCalendar, которое должно содержать идентификатор календаря, который должен использоваться в качестве календаря проекта.
{
requestId : 123890,
revision : 123,
success : true,
calendars : {
// each record represents a Gnt.model.Calendar instance
rows : [
{
Id : "1",
parentId : null,
Name : "General",
DaysPerMonth : 20,
DefaultAvailability : ["08:00-12:00","13:00-17:00"],
...
// the calendar data
Days : {
// each record represents Gnt.model.CalendarDay instance
rows : [{
Id : 2,
calendarId : "1",
Name : "Some big holiday",
Type : "DAY",
Date : "2010-01-14",
Availability : [],
Weekday : 0,
OverrideStartDate : null,
OverrideEndDate : null,
IsWorkingDay : false,
Cls : "gnt-national-holiday"
}],
total : 1
},
// child calendars go here
// each record represents a Gnt.model.Calendar instance
children : [{
Id : "2",
parentId : "1",
Name : "Holidays",
...
// "Holidays" calendar data
Days : {
// each record represents Gnt.model.CalendarDay instance
rows : [
{
Id : 3,
calendarId : "2",
Name : "Mats's birthday",
Date : "2010-01-13",
...
},
{
Id : 4
calendarId : "2",
Name : "Bryntum company holiday",
Date : "2010-02-01",
...
},
{
Id : 5,
calendarId : "2",
Name : "Bryntum 1st birthday",
Date : "2010-12-01",
...
}
],
total : 3
},
leaf : true
}]
}
],
total : 2,
metaData : {
// this specifies the identifier of the project calendar
projectCalendar : "1"
}
},
store2 : {
...
},
store3 : {
...
}
}
Ok mats! Но хотелось бы знать, могу ли я изменить значение единицы по умолчанию для распределения ресурсов в процентах к часам –