2011-11-24 16 views
12

Tôi đã dành nhiều ngày cố gắng tìm hiểu cách lưu hoặc cập nhật giá trị vào một CustomField theo lập trình và cuối cùng đã tìm ra cách nó được thực hiện. Vì vậy, tôi sẽ làm cho một câu hỏi và sau đó trả lời nó như tôi đã có thể yêu thương để có câu hỏi và câu trả lời này.Làm cách nào để lưu giá trị vào trường tùy chỉnh trong JIRA theo lập trình?

Có tài liệu xung đột về cách lưu hoặc cập nhật giá trị cho Trường tùy chỉnh trong JIRA. Tôi đã sử dụng:

customField.setCustomFieldValue(CustomField, value); 

Điều này không lưu giá trị vào cơ sở dữ liệu nhưng nó cập nhật giá trị theo như tôi có thể nói. Nó chỉ hữu ích nếu bạn đang sử dụng CustomField hơn nữa trong một quá trình chuyển đổi Workflow Post Function chẳng hạn.

Tôi đang sử dụng Jira 4.3.2.

Làm cách nào để duy trì giá trị CustomFields vào cơ sở dữ liệu JIRA?

Trả lời

16

Ok, đây là cách tôi cập nhật và lưu thành công giá trị CustomField vào db JIRA.

Comments hoan nghênh ...

private void saveValue(MutableIssue issue, String valueToSave, CustomField 
     customField) throws FieldLayoutStorageException { 

    issue.setCustomFieldValue(customField, valueToSave); 

    Map<String, ModifiedValue> modifiedFields = issue.getModifiedFields(); 

    FieldLayoutItem fieldLayoutItem = 
    ComponentManager.getInstance().getFieldLayoutManager().getFieldLayout(issue).getFieldLayoutItem(
      customField); 

    DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder(); 

    final ModifiedValue modifiedValue = (ModifiedValue) modifiedFields.get(customField.getId()); 

    customField.updateValue(fieldLayoutItem, issue, modifiedValue, issueChangeHolder); 
} 
+0

Tôi muốn làm setCustomFieldValue bên ngoài phương pháp này, do đó bạn không cần phải ghim valueToSave để String. – lilalinux

+0

Cảm ơn bạn, điều đó thực sự đã giúp tôi .... :) – Amrita

+0

cảm ơn ... bro .. bạn đã cứu cuộc sống của tôi ... – Arvind

-1

tôi đã cùng một vấn đề và đã có nó được giải quyết bằng this plugin, FYI =)

+0

Liên kết bị hỏng nhưng tiện ích bổ sung vẫn tồn tại như các tiện ích JIRA Suite thường được sử dụng – mdoar

3

Sau đây là cách tôi làm điều đó (đối với một lĩnh vực tùy chỉnh Tôi lập trình lưu trữ UUID ngẫu nhiên trong):

CustomField cfHash = customFieldManager.getCustomFieldObjectByName(...); 
IssueChangeHolder changeHolder = new DefaultIssueChangeHolder(); 
try { 
    Object newHashValue = java.util.UUID.randomUUID().toString(); 
    Object oldHashValue = issue.getCustomFieldValue(cfHash); 

    issue.setCustomFieldValue(cfHash, newHashValue); 
    cfHash.updateValue(null, issue, new ModifiedValue(oldHashValue, newHashValue), changeHolder); 
... 

Ít hoặc nhiều giống như bạn nhưng với cách khác để lấy ModifiedValue -Đối tượng.

+0

Nếu bạn phải điền một trường tùy chọn danh sách lựa chọn và giá trị mới không có trong danh sách lựa chọn thì sao? –

+0

Vì vậy, đối số 'fieldLayoutItem' của' updateValue' chỉ có thể là null? Tôi tự hỏi, nó có nghĩa là gì - và tại sao không có dạng 'updateValue' mà không có đối số đó ... –

+0

' fieldLayoutItem' được sử dụng để xác định trình kết xuất - trong trường hợp nó rỗng, nó sẽ dự phòng cho trình kết xuất văn bản . – LukeSolar

0

Đây là giải pháp phù hợp với tôi trong JIRA 6.4.7 để cập nhật giá trị trường tùy chỉnh. Trên thực tế Im cập nhật một chọn trường duy nhất, do đó tôi có để có được những Option cho nó:

MutableIssue issue = issueManager.getIssueByCurrentKey(issueKey); 
FieldConfig relevantConfig = customField.getRelevantConfig(issue); 
// if you use a text field use String. or double for numeric 
Option optionForValue = optionsManager.getOptions(relevantConfig).getOptionForValue(option, null); 
issue.setCustomFieldValue(customField,optionForValue); 
Map<String, ModifiedValue> modifiedFields = issue.getModifiedFields(); 
FieldLayoutItem fieldLayoutItem = 
fieldLayoutManager.getFieldLayout(issue).getFieldLayoutItem(customField); 
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder(); 
final ModifiedValue modifiedValue = modifiedFields.get(customField.getId()); 
customField.updateValue(fieldLayoutItem, issue, modifiedValue, issueChangeHolder);