κ°μ²΄ κ΄λ¦¬μμμ μ ν°μΌ μνλ₯Ό λ§λ€ μ μμ΅λλ€. κ΄λ¦¬μ/ν°μΌ κ°μ²΄λ₯Ό ν΄λ¦νλ©΄ λͺ¨λ νλͺ©μ ν΄λ¦ν μ μμ΅λλ€.
λκ΅°κ° μλ‘μ΄ μνλ₯Ό μΆκ°νλ λ°©λ²μ μ€λͺ ν΄ μ£Όμκ² μ΅λκΉ? "ν΄κ²°λ¨" μνκ° νμν©λλ€.
μ΄λ€ λμμ΄ λλ€λ©΄ λ§€μ° κ°μ¬νκ² μ΅λλ€.
μ λ°μ΄νΈ:
API μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λ¬Έμμ μ TicketStateλ₯Ό μΆκ°νμ΅λλ€. μ μνκ° νμλμ§ μμ΅λλ€.
{
"id": 11,
"state_type_id": 10,
"name": "In Bearbeitung",
"next_state_id": null,
"ignore_escalation": true,
"note": "In Bearbeitung",
"active": true,
"updated_by_id": 3,
"created_by_id": 3,
"created_at": "2017-01-02T21:13:27.003Z",
"updated_at": "2017-01-02T21:13:27.003Z"
}
+1
λν apiλ₯Ό ν΅ν΄ μ μνλ₯Ό μΆκ°νμ§λ§ νμλμ§ μμ΅λλ€. 무μμ΄ μλͺ»λμμ μ μμ΅λκΉ?
λν "μμ μ§ν μ€" μνκ° νμν©λλ€. +1:
κ·Έ λμ λ μΌμ€ μ½μμ ν΅ν΄ μ μνλ₯Ό μΆκ°νλ μμ λ°©λ²/ν΄κ²° λ°©λ²(μ°λ¦¬μ λͺ©νλ UIλ₯Ό ν΅ν΄ μ΄λ₯Ό λ€λ£¨λ κ²μ λλ€):
μ μνλ₯Ό μΆκ°νκ³ "κ³ κ° νΌλλ°±"μ΄λΌκ³ κ°μ ν΄ λ³΄κ² μ΅λλ€.
rails c
Ticket::State.create_or_update(
name: 'customer feedback',
state_type_id: Ticket::StateType.find_by(name: 'open').id,
ignore_escalation: true,
created_by_id: 1,
updated_by_id: 1,
)
λ λ²μ§Έλ‘ ν°μΌ μν μμ±μ μ νμ νμ©νλλ‘ μλ €μΌ ν©λλ€. μ¬κΈ°μ μκ° μμ΅λλ€. μ£Όμνμμμ€(λ¬΄μ¨ μμ μ μνν μ§ λͺ¨λ₯΄λ κ²½μ° λ¨Όμ λ°μ΄ν°λ² μ΄μ€ λ°±μ μ μμ±νμμμ€)!
ObjectManager::Attribute.add(
force: true,
object: 'Ticket',
name: 'state_id',
display: 'State',
data_type: 'select',
data_option: {
relation: 'TicketState',
nulloption: true,
multiple: false,
null: false,
default: Ticket::State.find_by(default_follow_up: true).id,
translate: true,
filter: Ticket::State.by_category(:viewable).pluck(:id),
},
editable: false,
active: true,
screens: {
create_middle: {
'ticket.agent' => {
null: false,
item_class: 'column',
filter: Ticket::State.by_category(:viewable_agent_new).pluck(:id),
},
'ticket.customer' => {
item_class: 'column',
nulloption: false,
null: true,
filter: Ticket::State.by_category(:viewable_customer_new).pluck(:id),
default: Ticket::State.find_by(default_create: true).id,
},
},
edit: {
'ticket.agent' => {
nulloption: false,
null: false,
filter: Ticket::State.by_category(:viewable_agent_edit).pluck(:id),
},
'ticket.customer' => {
nulloption: false,
null: true,
filter: Ticket::State.by_category(:viewable_customer_edit).pluck(:id),
default: Ticket::State.find_by(default_follow_up: true).id,
},
},
},
to_create: false,
to_migrate: false,
to_delete: false,
position: 40,
)
μ΄ κ²½μ° APIκ° μλͺ»λμλ€λ λ§μ λκΉ? λ¬Έμμ κΈ°λ‘λμ΄ μμ΄μΌ νμ§ μμκΉμ?
μ΄ κ²½μ° APIκ° μλͺ»λμλ€λ λ§μ λκΉ? λ¬Έμμ κΈ°λ‘λμ΄ μμ΄μΌ νμ§ μμκΉμ?
REST APIλ₯Ό μ¬μ©νμ¬ μ΄ λ³κ²½ μμ μ μνν μλ μμ΅λλ€.
-=> μ°λ¦¬μ λͺ©νλ UIλ₯Ό ν΅ν΄ 컀λ²νλ κ²μ λλ€. λ°λΌμ μ΄κ²μ UIλ₯Ό μ¬μ©ν μ μλ μμ λ―Έλ νμ°ν¬/ν΄κ²° λ°©λ² λ¨μμ λλ€.
μ°λ¦¬μ λͺ©νλ UIλ₯Ό ν΅ν΄ κ·Έκ²μ 컀λ²νλ κ²μ λλ€. λ°λΌμ μ΄κ²μ UIλ₯Ό μ¬μ©ν μ μλ μμ λ―Έλ νμ°ν¬/ν΄κ²° λ°©λ² λ¨μμ λλ€.
μ΄ UI κ°μ μ¬νμ λν΄ +1
μ΄ UI κ°μ μ¬νμ λν΄ +1
APIλ₯Ό ν΅ν΄ μλ‘ μμ±λ μνμ μ‘μΈμ€νλ λ°©λ²μ΄ μμ΅λκΉ?
κ²μμ΄ κ²μ μν: newone ?
λλ 2κ°μ μνλ₯Ό λ λ§λ€μκ³ κ·Έλ€μ μ μλνμ§λ§ API μ‘μΈμ€κ° νμν©λλ€
@skibson APIλ₯Ό ν΅ν΄ μ΄ λ³κ²½μ μλνλ©΄ λ€μ μλ΅μ΄ λ°νλ©λλ€.
"μ€λ₯": "μμ±μ νΈμ§ν μ μμ΅λλ€!"
λ λ²μ§Έ λλ μΈ λ²μ§Έ μνλ₯Ό νμνλ €λ©΄ 무μμ λ³κ²½ν΄μΌ ν©λκΉ?
λ μΌμ ν΅ν΄ μΆκ°ν 첫 λ²μ§Έ μνμμλ§ μλν©λλ€.
NVMμ΄ Zammadλ₯Ό λ€μ μμνμ΅λλ€.
κ·Έλ¬λ μνκ° "보λ₯ μ€μΈ μλ¦Ό"μ²λΌ μλνλλ‘ νλ λ°©λ²μ΄ μμ΅λκΉ? μνμ κ΄λ ¨λ λ μ§λ₯Ό μΆκ°νκ³ μΆμ΅λλ€.
μν μ νμ "미리 μλ¦Ό 보λ₯ μ€"κ³Ό λμΌν μ νμΌλ‘ μ€μ νλ©΄ μλνμ§ μμ΅λλ€.
@λ§ν°λ
κ·νμ λ¨κ³λ₯Ό λ°λμ λ λ€μ μ€λ₯κ° λ°μν©λλ€.
SyntaxError: (irb):11: syntax error, unexpected tIDENTIFIER, expecting ')'
name: 'state_id',
μ΄μ λ₯Ό μκ² μ΄μ?
μ λ μ맀λ 2.3μ μ°κ³ μμ΅λλ€.
κ°μ¬ ν΄μ!
@AchuM λ§μ§λ§ λ«λ ")" κ΄νΈλ₯Ό μμ΄λ²λ Έμ μλ μμ΅λλ€. νμΈν΄λ³΄μΈμ. π
μλ
νμΈμ @AchuM - μ½μμ μ½ν
μΈ λ₯Ό 볡μ¬νμ¬ λΆμ¬λ£λ λμ λ¬Έμ κ° λ°μν κ² κ°μ΅λλ€. λ΄μ©μ $ZAMMAD_DIR/add_state.rb
μ κ°μ $ZAMMAD_DIRμ νμΌμ λΆμ¬λ£κ³ $ZAMMAD_DIRμμ rails r add_state.rb
λ₯Ό ν΅ν΄ μ€ννλ κ²μ΄ μ’μ΅λλ€.
name: 'state_id',
μ€ μμ μΌνλ₯Ό λμΉ κ² κ°μ΅λλ€.
λ€! )
λ λ΄ μ€μ π
@thorsteneckel μμ£Ό μ’μ νμ λλ€, κ°μ¬ν©λλ€! UIλ₯Ό ν΅ν΄ μ΄κ²μ κ°μ§ λκΉμ§ κ·Έλ κ² ν κ²μ λλ€.
κ°μ¬ν©λλ€!
@martini @thorsteneckel κ³ κ°μ μν μ νμ μμ ν λΉνμ±ννλ λ°©λ²μ΄ μμ΅λκΉ? κ°μ¬ ν΄μ!
@martini μ΄λ¬ν λ μΌ μ
Έ λͺ
λ Ήμ μμν Elasticsearch API νΈμΆλ‘ μ΄λ»κ² λ³ννμκ² μ΅λκΉ?
/opt/zammad/bin/rails cλ₯Ό νΈμΆνλ DEB ν¨ν€μ§λ₯Ό μ€μΉνλ©΄ μ’
μμ± μ€λ₯κ° λ°νλκ³ Rubyμ μ΅μνμ§ μμ μ μνλ₯Ό μΆκ°ν μ μμ΅λλ€.
@gualican https://docs.zammad.org/en/latest/admin-console.html λ³΄μ ¨λμ? λ¬Έμ μΈμ¬
@martini μνμ λν UIλ₯Ό μΈμ μ¬μ©ν μ μλμ§ μμλκΉ? μ°λ¦¬λ λν μνμ μμμ μ€μ νκ³ μΆμ΅λλ€.
λν ν΄λΉ μ¬μ©μκ° ν°μΌ μνλ₯Ό λ³κ²½ν μ μκΈ°λ₯Ό λ°λλλ€. κ·Έλ€μ μ’ μ’ μλͺ»λ κ²μ μ ννλλ°, μ€μ§ μμ΄μ νΈλ§μ΄ κ·Έκ²μ ν μ μμ΄μΌ ν©λλ€.
μ΄ κΈ°λ₯λ +1ν©λλ€.
μ΄ κΈ°λ₯μ λν΄ +1
+1
μ΄ λ¬Έμ λ κ³Όκ±°μ μ μ©ν λκΈμ΄ μκ³ +1λ§ λ°μμΌλ―λ‘ μ§κΈμ λνλ₯Ό μ κΈλλ€.
κΈ°μ μ μΌλ‘ #1525μ 볡μ λ³Έμ΄λ―λ‘ μ΄ λ¬Έμ λ₯Ό λ«κ² μ΅λλ€. λ¬Έμμμ #1525λ₯Ό ν΄κ²°ν λκΉμ§ Zammad Rails μ½μμ ν΅ν΄ μ΄λ―Έ μνλ₯Ό μΆκ°ν μ μλ λ°©λ²μ μ€λͺ ν©λλ€. μ§κΈ λ«μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
REST APIλ₯Ό μ¬μ©νμ¬ μ΄ λ³κ²½ μμ μ μνν μλ μμ΅λλ€.
-=> μ°λ¦¬μ λͺ©νλ UIλ₯Ό ν΅ν΄ 컀λ²νλ κ²μ λλ€. λ°λΌμ μ΄κ²μ UIλ₯Ό μ¬μ©ν μ μλ μμ λ―Έλ νμ°ν¬/ν΄κ²° λ°©λ² λ¨μμ λλ€.