Documentation
¶
Index ¶
- Constants
- Variables
- func InitAPITable(token string, baseUrl string) (err error)
- func InitAPITableByConfig() error
- func NewAttachmentValue(name, token string) map[string]any
- func NewNumValue(value float64) float64
- func NewOneWayLinkValue(recordIds []string) []string
- func NewTextValue(text string) string
- func NewTimeValue(t time.Time) float64
- func ParseFormulaValue(value any) (string, error)
- func ParseMagicLookUpValue(value any) (any, error)
- func ParseNumValue(value any) (float64, error)
- func ParseOneWayLinkValue(value any) ([]string, error)
- func ParseTextValue(value any) (string, error)
- func ParseTimeValue(value any) (time.Time, error)
- type AddField
- func NewAttachmentCol(colName string) *AddField
- func NewFormulaCol(colName string, expression string) *AddField
- func NewMagicLookUpCol(colName string, config *MagicLookUpConfig) *AddField
- func NewMultiSelectCol(colName string, options []*SelectFieldOption) *AddField
- func NewOneWayLinkCol(colName string, foreignDatasheetId string, multiSelect bool) *AddField
- func NewSimpleMagicLookUpCol(colName string, relatedLinkFieldId string, targetFieldId string) *AddField
- func NewSimpleNumCol(colName string) *AddField
- func NewSimpleTimeCol(colName string) *AddField
- func NewSimpleUserCol(colName string, isMultiple bool) *AddField
- func NewSingleSelectCol(colName string, options []*SelectFieldOption) *AddField
- func NewTextCol(colName string) *AddField
- func NewTwoWayLinkCol(colName string, foreignDatasheetId, brotherFieldId string, multiSelect bool) *AddField
- type AddRecord
- type ApiTableEvent
- type AttachmentValue
- type BaseDataProvider
- func (h *BaseDataProvider) BindProvider(provider DataProvider) *BaseDataProvider
- func (h *BaseDataProvider) CreateOrUpdateLocalRecord(localRecord any, mtblRecord *CommonRecord) (newRecord any, stop bool, err error)
- func (h *BaseDataProvider) GetColList() []*AddField
- func (h *BaseDataProvider) GetFirstCol() *AddField
- func (h *BaseDataProvider) GetLastEditFrom(record any) string
- func (h *BaseDataProvider) GetLocalRecordByMtbl(mtblRecord *CommonRecord) (any, error)
- func (h *BaseDataProvider) GetPrimaryCol() *FieldConfig
- func (h *BaseDataProvider) GetPrimaryVal(record any) string
- func (h *BaseDataProvider) GetSyncData() ([]*AddRecord, error)
- func (h *BaseDataProvider) GetTableName() string
- func (h *BaseDataProvider) HandleMtblEvent() error
- func (h *BaseDataProvider) L2M(record any, oldMtblRecord *CommonRecord) map[string]any
- func (h *BaseDataProvider) M2L(mtblRecord *CommonRecord, localRecord any) any
- func (h *BaseDataProvider) SetDoc(doc *MultiTableDoc)
- func (h *BaseDataProvider) UpdateLastEditToLTBL(localId string, lastEditFrom string) error
- func (h *BaseDataProvider) WithLogger(logger *plogger.PLogWarper) *BaseDataProvider
- type CellOption
- type CellUserValue
- type CommonRecord
- type DataProvider
- type Field
- type FieldConfig
- type FieldType
- type GetRecordRequest
- type GetTeamListResponse
- type GetTeamMembersResponse
- type GetUserResponse
- type LastEditFromMarker
- type MagicLookUpConfig
- type MagicLookUpFilterCondition
- type MagicLookUpFilterInfo
- type MagicLookUpSortInfo
- type MagicLookUpSortRule
- type MtblDAO
- type MultiTableDoc
- func (doc *MultiTableDoc) AddCol(fields []*AddField) (ret []*Field, err error)
- func (doc *MultiTableDoc) AddRow(rows []*AddRecord) (records []*CommonRecord, err error)
- func (doc *MultiTableDoc) DelAllRows() error
- func (doc *MultiTableDoc) DelCol(fieldIds []string) error
- func (doc *MultiTableDoc) DelRow(recordIds []string) error
- func (doc *MultiTableDoc) DisableFieldPermission(fieldId string) error
- func (doc *MultiTableDoc) EditRow(rows []*UpdateRecord) error
- func (doc *MultiTableDoc) EnableFieldPermission(fieldId string, includeExtend bool) error
- func (doc *MultiTableDoc) GetCols() ([]*Field, error)
- func (doc *MultiTableDoc) GetRow(req *GetRecordRequest) (*getRecordResponse, error)
- func (doc *MultiTableDoc) SetColList(myColList []*AddField, deleteExcept bool) (isEdited bool, err error)
- func (doc *MultiTableDoc) UpdateFieldPermissionRole(fieldId string, unitIds []string, role Role) error
- func (doc *MultiTableDoc) UploadAttachment(filePath string) (*uploadAttachmentResponse, error)
- func (doc *MultiTableDoc) UploadAttachmentWithPresignedUrl(fileName, contentType string, fileSize int64, fileReader io.Reader) (*uploadAttachmentResponse, error)
- type Role
- type SelectFieldOption
- type SelectFieldOptionColor
- type SelectFieldOptionHandler
- func (h *SelectFieldOptionHandler) GetCellOptionById_I(id int32) *CellOption
- func (h *SelectFieldOptionHandler) GetCellOptionById_S(id string) *CellOption
- func (h *SelectFieldOptionHandler) GetCellOptionByText(text string) *CellOption
- func (h *SelectFieldOptionHandler) GetOptionByText(text string) *SelectFieldOption
- func (h *SelectFieldOptionHandler) GetOptionList() []*SelectFieldOption
- func (h *SelectFieldOptionHandler) RegOptionI(id int32, text string, style SelectFieldOptionColor)
- func (h *SelectFieldOptionHandler) RegOptionS(id, text string, style SelectFieldOptionColor)
- func (h *SelectFieldOptionHandler) Reset()
- type SortRule
- type SyncHelper
- func (s *SyncHelper) DeleteMTBL(localId string, deleteTime time.Time) error
- func (s *SyncHelper) InitMTBL(spaceId, datasheetId string) (string, error)
- func (s *SyncHelper) SetInit(init bool) *SyncHelper
- func (s *SyncHelper) UpdateToLTBL(mtblRecord *CommonRecord) error
- func (s *SyncHelper) UpdateToMTBL(localRecord any, updateTime time.Time) (err error)
- func (s *SyncHelper) WithLogger(logger *plogger.PLogWarper) *SyncHelper
- type TableConfig
- type Team
- type UpdateRecord
- type UpdateRecordRequest
- type UpdateRecordResponse
- type User
Constants ¶
const ( CELL_VALUE_KEY_TYPE_FIELD_TITLE = "name" // apitable 使用 name 作为字段键 CELL_VALUE_KEY_TYPE_FIELD_ID = "id" // apitable 使用 id 作为字段键 )
const DefaultConfigGroup = "APITable"
Variables ¶
var AllColors = []SelectFieldOptionColor{ ColorRed, ColorOrange, ColorYellow, ColorBlue, ColorGreen, ColorPurple, ColorGray, ColorPink, }
var LastEditFromMarker_LTBL = &LastEditFromMarker{ keyToTimeMap: make(map[string]time.Time)}
local table
var LastEditFromMarker_MTBL = &LastEditFromMarker{ keyToTimeMap: make(map[string]time.Time)}
multi table
var LastEditFrom_LTBL string = "LTBL"
var LastEditFrom_MTBL string = "MTBL"
var LastEditFrom_TEMP string = "TEMP"
Functions ¶
func InitAPITable ¶
func InitAPITableByConfig ¶
func InitAPITableByConfig() error
--------------------------------------------------
func NewAttachmentValue ¶
Attachment (文件/附件) 字段
func NewNumValue ¶
func NewOneWayLinkValue ¶
-------------------------------------------------- OneWayLink(单向关联)字段值处理 ([]string)nil 表示空值
func NewTextValue ¶
--------------------------------------------------
func NewTimeValue ¶
--------------------------------------------------
func ParseFormulaValue ¶
-------------------------------------------------- Formula(智能公式)字段值处理,不能直接写入值,只能读取计算结果,类型由列配置的valueType决定 NewFormulaCol直接写入了string类型,所以这里直接解析成string
func ParseMagicLookUpValue ¶
-------------------------------------------------- MagicLookUp(神奇引用)字段值处理,不能直接写入值,只能读取计算结果,类型由列配置的RollupFunction决定
func ParseNumValue ¶
func ParseOneWayLinkValue ¶
func ParseTextValue ¶
Types ¶
type AddField ¶
type AddField struct {
Type FieldType `json:"type"`
Name string `json:"name"`
Property map[string]any `json:"property"`
}
func NewAttachmentCol ¶ added in v0.0.6
-------------------------------------------------- Attachment (文件/附件) 字段
func NewFormulaCol ¶ added in v0.0.6
-------------------------------------------------- Formula(智能公式)字段,暂时只处理string类型
func NewMagicLookUpCol ¶ added in v0.0.6
func NewMagicLookUpCol(colName string, config *MagicLookUpConfig) *AddField
func NewMultiSelectCol ¶ added in v0.0.6
func NewMultiSelectCol(colName string, options []*SelectFieldOption) *AddField
func NewOneWayLinkCol ¶ added in v0.0.6
-------------------------------------------------- OneWayLink(单向关联)字段
func NewSimpleMagicLookUpCol ¶ added in v0.0.6
func NewSimpleMagicLookUpCol(colName string, relatedLinkFieldId string, targetFieldId string) *AddField
NewSimpleMagicLookUpCol 创建简单的神奇引用字段(不带筛选和排序)
func NewSimpleNumCol ¶
--------------------------------------------------
func NewSimpleTimeCol ¶
--------------------------------------------------
func NewSimpleUserCol ¶
-------------------------------------------------- 成员类型,因为用户列表API调不通,所以暂时用不上
func NewSingleSelectCol ¶ added in v0.0.6
func NewSingleSelectCol(colName string, options []*SelectFieldOption) *AddField
func NewTextCol ¶
type ApiTableEvent ¶ added in v0.0.6
type AttachmentValue ¶ added in v0.0.6
type AttachmentValue struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Token string `json:"token,omitempty"`
MimeType string `json:"mimeType,omitempty"`
Size int64 `json:"size,omitempty"`
Url string `json:"url,omitempty"`
Width int `json:"width,omitempty"`
Height int `json:"height,omitempty"`
}
AttachmentValue 是解析后附件的结构体表示
func ParseAttachmentValue ¶
func ParseAttachmentValue(value any) ([]AttachmentValue, error)
ParseAttachmentValue 将单元格中的附件值解析为 []AttachmentValue
type BaseDataProvider ¶ added in v0.0.6
type BaseDataProvider struct {
Ctx context.Context
// 该字段需要初始化设置好,mtbl事件处理中用于过滤属于当前表的事件
DatasheetID string
// 初始化总是nil,由 SyncHelper 根据mtbl事件自动加载
Doc *MultiTableDoc
TableConfig *TableConfig
DAO MtblDAO
// contains filtered or unexported fields
}
func (*BaseDataProvider) BindProvider ¶ added in v0.0.7
func (h *BaseDataProvider) BindProvider(provider DataProvider) *BaseDataProvider
BindProvider 用于将BaseDataProvider绑定到外层DataProvider实现。 子类嵌入BaseDataProvider时,初始化后调用:base.BindProvider(subClass)
func (*BaseDataProvider) CreateOrUpdateLocalRecord ¶ added in v0.0.6
func (h *BaseDataProvider) CreateOrUpdateLocalRecord( localRecord any, mtblRecord *CommonRecord, ) (newRecord any, stop bool, err error)
impl DataProvider
func (*BaseDataProvider) GetColList ¶ added in v0.0.6
func (h *BaseDataProvider) GetColList() []*AddField
impl DataProvider
func (*BaseDataProvider) GetFirstCol ¶ added in v0.0.6
func (h *BaseDataProvider) GetFirstCol() *AddField
impl DataProvider
func (*BaseDataProvider) GetLastEditFrom ¶ added in v0.0.6
func (h *BaseDataProvider) GetLastEditFrom(record any) string
impl DataProvider
func (*BaseDataProvider) GetLocalRecordByMtbl ¶ added in v0.0.6
func (h *BaseDataProvider) GetLocalRecordByMtbl(mtblRecord *CommonRecord) (any, error)
impl DataProvider
func (*BaseDataProvider) GetPrimaryCol ¶ added in v0.0.6
func (h *BaseDataProvider) GetPrimaryCol() *FieldConfig
impl DataProvider
func (*BaseDataProvider) GetPrimaryVal ¶ added in v0.0.6
func (h *BaseDataProvider) GetPrimaryVal(record any) string
impl DataProvider
func (*BaseDataProvider) GetSyncData ¶ added in v0.0.6
func (h *BaseDataProvider) GetSyncData() ([]*AddRecord, error)
impl DataProvider
func (*BaseDataProvider) GetTableName ¶ added in v0.0.6
func (h *BaseDataProvider) GetTableName() string
impl DataProvider
func (*BaseDataProvider) HandleMtblEvent ¶ added in v0.0.6
func (h *BaseDataProvider) HandleMtblEvent() error
func (*BaseDataProvider) L2M ¶ added in v0.0.6
func (h *BaseDataProvider) L2M(record any, oldMtblRecord *CommonRecord) map[string]any
impl DataProvider
func (*BaseDataProvider) M2L ¶ added in v0.0.6
func (h *BaseDataProvider) M2L(mtblRecord *CommonRecord, localRecord any) any
impl DataProvider
func (*BaseDataProvider) SetDoc ¶ added in v0.0.6
func (h *BaseDataProvider) SetDoc(doc *MultiTableDoc)
-------------------------------------------------- impl DataProvider
func (*BaseDataProvider) UpdateLastEditToLTBL ¶ added in v0.0.6
func (h *BaseDataProvider) UpdateLastEditToLTBL(localId string, lastEditFrom string) error
impl DataProvider
func (*BaseDataProvider) WithLogger ¶ added in v0.0.6
func (h *BaseDataProvider) WithLogger(logger *plogger.PLogWarper) *BaseDataProvider
type CellOption ¶
type CellOption string
--------------------------------------------------
func NewOptionValue ¶
func NewOptionValue(option *SelectFieldOption) *CellOption
func NewOptionValueByStr ¶ added in v0.0.6
func NewOptionValueByStr(str string) *CellOption
func ParseMultiOptionValue ¶ added in v0.0.7
func ParseMultiOptionValue(value any) ([]*CellOption, error)
func ParseSingleOptionValue ¶
func ParseSingleOptionValue(value any) (*CellOption, error)
func (*CellOption) GetKey ¶
func (opt *CellOption) GetKey() string
type CellUserValue ¶
type CellUserValue struct {
// Id string `json:"id"` // 组织单元的ID
UserId string `json:"id"` // 组织单元的ID
Type int32 `json:"type"` // 组织单元的类型,1是小组,3是成员
Name string `json:"name"` // 小组或成员的名称
Avatar string `json:"avatar,omitempty"` // 头像URL,只读,不可写入
}
-------------------------------------------------- 成员类型单元格值,因为用户列表API调不通,所以暂时用不上
func NewUserValue ¶
func NewUserValue(userIds ...string) []CellUserValue
func ParseUserValue ¶
func ParseUserValue(value any) ([]CellUserValue, error)
type CommonRecord ¶
type CommonRecord struct {
RecordId string `json:"recordId"`
Fields map[string]any `json:"fields"`
CreatedAt int64 `json:"createdAt"`
UpdatedAt int64 `json:"updatedAt"`
}
--------------------------------------------------
type DataProvider ¶ added in v0.0.6
type DataProvider interface {
// 如果内部创建新的表,传递到外部存储
SetDoc(doc *MultiTableDoc)
// --------------------------------------------------
// 表配置
GetTableName() string // GetTableName 获取表名
GetFirstCol() *AddField // GetFirstCol 获取主键列定义
GetColList() []*AddField // GetColList 获取所有列定义
// --------------------------------------------------
// 本地主键,用于在MTBL中定位本地记录
GetPrimaryCol() *FieldConfig
GetPrimaryVal(localRecord any) string
// GetLastEditFrom 获取最后修改来源
GetLastEditFrom(localRecord any) string
// UpdateLastEditFromToLTBL 更新本地记录的 LastEditFrom 字段
UpdateLastEditToLTBL(localId, lastEditFrom string) error
// --------------------------------------------------
GetSyncData() ([]*AddRecord, error) // 获取全量同步的数据,用于SyncHelper.InitMTBL
// GetLocalRecordByMtbl 根据MTBL记录获取本地记录,隐含了M2LTBL的反向映射逻辑
// 返回error将中断处理,可以返回[nil,nil]继续处理mtbl新增数据,而ltbl不存在的情况
GetLocalRecordByMtbl(mtblRecord *CommonRecord) (localRecord any, err error)
// CreateOrUpdateLocalRecord 应用本地更新(写入DB)
// localRecord: 旧的本地记录,可能是nil,一般意味着需要创建新本地记录
// mtblRecord: 原始MTBL记录
// 返回:
// newRecord: 创建或更新后的新数据
// stop用于中断SyncHelper后续对MTBL的处理,
// 用户通过MTBL操作,但只是作为一个入口,触发后端复杂逻辑
// 而这个数据其实不需要维护,甚至被删除了,则SyncHelper.UpdateToLTBL不再需要继续处理
CreateOrUpdateLocalRecord(localRecord any, mtblRecord *CommonRecord,
) (newRecord any, stop bool, err error)
// L2M 将本地记录转换为APITable记录
// 先赋值oldRecord,再用localRecord覆盖
L2M(localRecord any, mtblRecord *CommonRecord) map[string]any
// M2L 将MTBL记录转换为本地记录结构
// 如果localRecord不为nil,则直接用mtblRecord覆盖到localRecord
M2L(mtblRecord *CommonRecord, localRecord any) any
}
SyncHelper只封装同步策略和MTBL的大部分操作 而本地数据操作,以及数据转换等等都是DataProvider接口提供的
type FieldConfig ¶ added in v0.0.6
type FieldType ¶
type FieldType string
-------------------------------------------------- 字段类型 -------------------------------------------------- 字段类型常量
const ( // FIELD_TYPE_SINGLE_TEXT FieldType = "SingleText" //单行文本 // FIELD_TYPE_TEXT FieldType = "Text" //多行文本 FIELD_TYPE_TEXT FieldType = "SingleText" // 用一个就好了,文档有两个类型 FIELD_TYPE_SINGLE_SELECT FieldType = "SingleSelect" //单选 FIELD_TYPE_MULTI_SELECT FieldType = "MultiSelect" //多选 FIELD_TYPE_NUMBER FieldType = "Number" //数字 FIELD_TYPE_CURRENCY FieldType = "Currency" //货币 FIELD_TYPE_PERCENT FieldType = "Percent" //百分比 FIELD_TYPE_DATE_TIME FieldType = "DateTime" //日期 FIELD_TYPE_ATTACHMENT FieldType = "Attachment" //附件 FIELD_TYPE_MEMBER FieldType = "Member" //成员 FIELD_TYPE_CHECKBOX FieldType = "Checkbox" //勾选 FIELD_TYPE_RATING FieldType = "Rating" //评分 FIELD_TYPE_URL FieldType = "URL" //网址 FIELD_TYPE_PHONE FieldType = "Phone" //电话 FIELD_TYPE_EMAIL FieldType = "Email" //邮箱 FIELD_TYPE_WORK_DOC FieldType = "WorkDoc" //轻文档 FIELD_TYPE_ONE_WAY_LINK FieldType = "OneWayLink" //单向关联 FIELD_TYPE_TWO_WAY_LINK FieldType = "TwoWayLink" //双向关联 FIELD_TYPE_MAGIC_LOOKUP FieldType = "MagicLookUp" //神奇引用 FIELD_TYPE_FORMULA FieldType = "Formula" //智能公式 FIELD_TYPE_AUTO_NUMBER FieldType = "AutoNumber" //自增数字 FIELD_TYPE_CREATED_TIME FieldType = "CreatedTime" //创建时间 FIELD_TYPE_LAST_MODIFIED_TIME FieldType = "LastModifiedTime" //修改时间 FIELD_TYPE_CREATED_BY FieldType = "CreatedBy" //创建人 FIELD_TYPE_LAST_MODIFIED_BY FieldType = "LastModifiedBy" //更新人 FIELD_TYPE_BUTTON FieldType = "Button" //按钮 )
type GetRecordRequest ¶
type GetRecordRequest struct {
PageSize int `json:"pageSize,omitempty"`
MaxRecords int `json:"maxRecords,omitempty"`
PageNum int `json:"pageNum,omitempty"`
Sort []SortRule `json:"sort,omitempty"`
RecordIds []string `json:"recordIds,omitempty"`
ViewId string `json:"viewId,omitempty"`
Fields []string `json:"fields,omitempty"`
FilterByFormula string `json:"filterByFormula,omitempty"`
CellFormat string `json:"cellFormat,omitempty"`
FieldKey string `json:"fieldKey,omitempty"`
}
查询记录请求结构
type GetTeamListResponse ¶
type GetTeamListResponse struct {
Success bool `json:"success"`
Code int `json:"code"`
Message string `json:"message"`
Data struct {
PageNum int `json:"pageNum"`
PageSize int `json:"pageSize"`
Total int `json:"total"`
Teams []*Team `json:"teams"`
} `json:"data"`
}
GetTeamListResponse 获取小组列表响应
type GetTeamMembersResponse ¶
type GetTeamMembersResponse struct {
Success bool `json:"success"`
Code int `json:"code"`
Message string `json:"message"`
Data struct {
PageNum int `json:"pageNum"`
PageSize int `json:"pageSize"`
Total int `json:"total"`
Members []*User `json:"members"`
} `json:"data"`
}
GetTeamMembersResponse 获取小组成员响应
type GetUserResponse ¶
type GetUserResponse struct {
Success bool `json:"success"`
Code int `json:"code"`
Message string `json:"message"`
Data User `json:"data"`
}
GetUserResponse 获取单个用户响应
type LastEditFromMarker ¶ added in v0.0.6
type LastEditFromMarker struct {
// contains filtered or unexported fields
}
func (*LastEditFromMarker) CleanTimeoutRecord ¶ added in v0.0.6
func (m *LastEditFromMarker) CleanTimeoutRecord()
func (*LastEditFromMarker) Set ¶ added in v0.0.6
func (m *LastEditFromMarker) Set(key string)
func (*LastEditFromMarker) SkipAndClean ¶ added in v0.0.6
func (m *LastEditFromMarker) SkipAndClean(key string, updateTime time.Time) bool
type MagicLookUpConfig ¶ added in v0.0.6
type MagicLookUpConfig struct {
RelatedLinkFieldId string // 引用的当前表的关联字段 ID(注意这是本表)
TargetFieldId string // 关联表中查询的字段 ID(注意这是关联的表)
RollupFunction string // 汇总函数,如 "VALUES", "AVERAGE", "COUNT" 等
EnableFilterSort bool // 是否开启筛选和排序
SortInfo *MagicLookUpSortInfo // 排序设置
FilterInfo *MagicLookUpFilterInfo // 筛选设置
LookUpLimit string // 限制展示的记录数量 "ALL" 或 "FIRST"
}
-------------------------------------------------- MagicLookUp(神奇引用)字段
type MagicLookUpFilterCondition ¶ added in v0.0.6
type MagicLookUpFilterInfo ¶ added in v0.0.6
type MagicLookUpFilterInfo struct {
Conjunction string `json:"conjunction"` // "and" 或 "or"
Conditions []MagicLookUpFilterCondition `json:"conditions"`
}
type MagicLookUpSortInfo ¶ added in v0.0.6
type MagicLookUpSortInfo struct {
Rules []MagicLookUpSortRule `json:"rules"`
}
type MagicLookUpSortRule ¶ added in v0.0.6
type MtblDAO ¶ added in v0.0.6
type MtblDAO interface {
Add(ctx context.Context, do any) error
UpdateByID(ctx context.Context, do any) error
GetAll(ctx context.Context) ([]any, error)
GetByID(ctx context.Context, id int32) (any, error)
// 删除只能依靠mtblRecordId,因为回调中mtbl已经没有这个数据,无法二次查询到LocalId了
DeleteByID(ctx context.Context, id int32) error
UpdateMtblInfo(_ctx context.Context, localId string, lastEditFrom string) error
}
定义常规DAO应该提供的CURD方法
type MultiTableDoc ¶
type MultiTableDoc struct {
SpaceId string `json:"spaceId"` // 空间ID
DatasheetId string `json:"datasheetId"` // 数据表ID
// contains filtered or unexported fields
}
func CreateMultiTable ¶
func CreateMultiTable(spaceId, tblName string, keyCol *AddField) (doc *MultiTableDoc, err error)
APITable 首列不能隐藏/删除/拖拽等等操作,所以需要指定业务的主键列名
func NewMultiTableDoc ¶
func NewMultiTableDoc(spaceId, datasheetId string) *MultiTableDoc
func (*MultiTableDoc) AddCol ¶
func (doc *MultiTableDoc) AddCol(fields []*AddField) (ret []*Field, err error)
-------------------------------------------------- 添加指定类型的字段
func (*MultiTableDoc) AddRow ¶
func (doc *MultiTableDoc) AddRow(rows []*AddRecord) (records []*CommonRecord, err error)
-------------------------------------------------- 增加记录
func (*MultiTableDoc) DelAllRows ¶
func (doc *MultiTableDoc) DelAllRows() error
-------------------------------------------------- 清空记录
func (*MultiTableDoc) DelRow ¶
func (doc *MultiTableDoc) DelRow(recordIds []string) error
-------------------------------------------------- 删除记录
func (*MultiTableDoc) DisableFieldPermission ¶ added in v0.0.6
func (doc *MultiTableDoc) DisableFieldPermission(fieldId string) error
DisableFieldPermission disables field-level permission for a field.
func (*MultiTableDoc) EditRow ¶
func (doc *MultiTableDoc) EditRow(rows []*UpdateRecord) error
--------------------------------------------------
func (*MultiTableDoc) EnableFieldPermission ¶ added in v0.0.6
func (doc *MultiTableDoc) EnableFieldPermission(fieldId string, includeExtend bool) error
EnableFieldPermission enables field-level permission for a field. includeExtend true will include extended permissions if supported by API.
func (*MultiTableDoc) GetCols ¶
func (doc *MultiTableDoc) GetCols() ([]*Field, error)
-------------------------------------------------- 查询字段
func (*MultiTableDoc) GetRow ¶
func (doc *MultiTableDoc) GetRow(req *GetRecordRequest) (*getRecordResponse, error)
-------------------------------------------------- 创建记录
func (*MultiTableDoc) SetColList ¶
func (doc *MultiTableDoc) SetColList(myColList []*AddField, deleteExcept bool) (isEdited bool, err error)
设置多维表格文档的列列表: 如果该列已存在,则不修改。如需修改列,为了确保程序不会误删数据,应该手动删除列,再通过该方法重建。 如果该列不存在,则添加列。 如果deleteExcept为true,则删除除myColList之外的所有列。
func (*MultiTableDoc) UpdateFieldPermissionRole ¶ added in v0.0.6
func (doc *MultiTableDoc) UpdateFieldPermissionRole(fieldId string, unitIds []string, role Role) error
func (*MultiTableDoc) UploadAttachment ¶ added in v0.0.6
func (doc *MultiTableDoc) UploadAttachment(filePath string) (*uploadAttachmentResponse, error)
UploadAttachment 上传单个文件到 datasheet,返回服务器返回的数据(包含 token)
func (*MultiTableDoc) UploadAttachmentWithPresignedUrl ¶ added in v0.0.6
func (doc *MultiTableDoc) UploadAttachmentWithPresignedUrl( fileName, contentType string, fileSize int64, fileReader io.Reader, ) (*uploadAttachmentResponse, error)
Niubility! finally works! 因为官方文档提供的上传附件,只能multipart/form-data类型 但是这样上传后图片无法展示缩略图,那就无法使用相册视图了 所以我尝试扒apitable网页的上传逻辑,使用 presigned URL 上传,成功了! 这代码虽然有点臭,配合AI一点点调试出来的,暂时也没有封装的必要 相关源码位置:(git tag v1.13.0-beta.1) packages/room-server/src/fusion/vos/attachment.vo.ts packages/room-server/src/fusion/fusion.api.controller.ts backend-server/application/src/main/java/com/apitable/asset/controller/AssetCallbackController.java
type Role ¶ added in v0.0.6
type Role string
const ( RoleAdministrator Role = "administrator" RoleManager Role = "manager" // 页面出错 RoleEditor Role = "editor" // 不可编辑列配置,可以修改单元格 RoleReader Role = "reader" // 不可编辑列配置,可以修改单元格 RoleNone Role = "none" // 页面出错 RoleMember Role = "member" // 页面出错 RoleGuest Role = "guest" // 页面出错 RoleForeigner Role = "foreigner" // 页面出错 )
type SelectFieldOption ¶
type SelectFieldOption struct {
Id string `json:"id,omitempty"`
// Name string `json:"name"`
Text string `json:"name"`
// Color *SelectFieldOptionColor `json:"color,omitempty"` // 文档有问题,这里只需要string
Style SelectFieldOptionColor `json:"color,omitempty"`
}
type SelectFieldOptionColor ¶
type SelectFieldOptionColor string
var ( ColorRed SelectFieldOptionColor = "red_4" ColorOrange SelectFieldOptionColor = "tangerine_4" ColorYellow SelectFieldOptionColor = "yellow_4" ColorBlue SelectFieldOptionColor = "blue_4" ColorGreen SelectFieldOptionColor = "green_4" ColorPurple SelectFieldOptionColor = "deepPurple_4" ColorGray SelectFieldOptionColor = "blue_0" ColorPink SelectFieldOptionColor = "pink_4" )
预定义的颜色选项
type SelectFieldOptionHandler ¶ added in v0.0.6
type SelectFieldOptionHandler struct {
// contains filtered or unexported fields
}
func (*SelectFieldOptionHandler) GetCellOptionById_I ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) GetCellOptionById_I(id int32) *CellOption
func (*SelectFieldOptionHandler) GetCellOptionById_S ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) GetCellOptionById_S(id string) *CellOption
func (*SelectFieldOptionHandler) GetCellOptionByText ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) GetCellOptionByText(text string) *CellOption
func (*SelectFieldOptionHandler) GetOptionByText ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) GetOptionByText(text string) *SelectFieldOption
func (*SelectFieldOptionHandler) GetOptionList ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) GetOptionList() []*SelectFieldOption
func (*SelectFieldOptionHandler) RegOptionI ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) RegOptionI(id int32, text string, style SelectFieldOptionColor)
func (*SelectFieldOptionHandler) RegOptionS ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) RegOptionS(id, text string, style SelectFieldOptionColor)
func (*SelectFieldOptionHandler) Reset ¶ added in v0.0.6
func (h *SelectFieldOptionHandler) Reset()
type SyncHelper ¶ added in v0.0.6
type SyncHelper struct {
// contains filtered or unexported fields
}
--------------------------------------------------
func NewSyncHelper ¶ added in v0.0.6
func NewSyncHelper(data DataProvider, doc *MultiTableDoc) *SyncHelper
func (*SyncHelper) DeleteMTBL ¶ added in v0.0.6
func (s *SyncHelper) DeleteMTBL(localId string, deleteTime time.Time) error
func (*SyncHelper) InitMTBL ¶ added in v0.0.6
func (s *SyncHelper) InitMTBL(spaceId, datasheetId string) (string, error)
InitMTBL 初始化多维表格 spaceId: 空间ID datasheetId: 表格ID,如果为空则创建新表 return: 最终的表格ID,错误信息
func (*SyncHelper) SetInit ¶ added in v0.0.6
func (s *SyncHelper) SetInit(init bool) *SyncHelper
init 的意义是,创建表格,全量写入数据时,MTBL的自动化还没有建立 所以双向同步的逻辑有点不一样,主要体现在 LastEditFrom 字段将被设置为LTBL,而不是TEMP
func (*SyncHelper) UpdateToLTBL ¶ added in v0.0.6
func (s *SyncHelper) UpdateToLTBL(mtblRecord *CommonRecord) error
func (*SyncHelper) UpdateToMTBL ¶ added in v0.0.6
func (s *SyncHelper) UpdateToMTBL( localRecord any, updateTime time.Time, ) (err error)
从外部传入record,让业务代码复用record的获取逻辑
func (*SyncHelper) WithLogger ¶ added in v0.0.6
func (s *SyncHelper) WithLogger(logger *plogger.PLogWarper) *SyncHelper
type TableConfig ¶ added in v0.0.6
type TableConfig struct {
TableName string
FirstCol *AddField // 多维表格的第一列,无法隐藏无法移动
PrimaryCol *FieldConfig // 对应本地唯一标识字段,一般是主键字段
ColList []*FieldConfig
NewDO func() any
}
type Team ¶
type Team struct {
UnitId string `json:"unitId"`
Name string `json:"name"`
Sequence int `json:"sequence"`
ParentUnitId string `json:"parentUnitId"`
Roles []struct {
UnitId string `json:"unitId"`
Name string `json:"name"`
Sequence int `json:"sequence"`
} `json:"roles"`
}
Team 表示小组信息
type UpdateRecord ¶
type UpdateRecord struct {
RecordId string `json:"recordId"`
Fields map[string]any `json:"fields"`
}
-------------------------------------------------- api req/resp结构 --------------------------------------------------
type UpdateRecordRequest ¶
type UpdateRecordRequest struct {
Records []*UpdateRecord `json:"records"`
FieldKey string `json:"fieldKey,omitempty"` // "name" or "id", default "name"
}
type UpdateRecordResponse ¶
type UpdateRecordResponse struct {
Success bool `json:"success"`
Code int `json:"code"`
Message string `json:"message"`
Data struct {
Records []CommonRecord `json:"records"`
} `json:"data"`
}
type User ¶
type User struct {
UnitId string `json:"unitId"`
Name string `json:"name"`
Email string `json:"email"`
Mobile struct {
Number string `json:"number"`
AreaCode string `json:"areaCode"`
} `json:"mobile"`
Avatar string `json:"avatar"`
Status int `json:"status"` // 0:未加入空间站, 1:已加入空间站
Type string `json:"type"` // PrimaryAdmin, SubAdmin, Member
Teams []struct {
UnitId string `json:"unitId"`
Name string `json:"name"`
Sequence int `json:"sequence"`
ParentUnitId string `json:"parentUnitId"`
} `json:"teams"`
Roles []struct {
UnitId string `json:"unitId"`
Name string `json:"name"`
Sequence int `json:"sequence"`
} `json:"roles"`
}
User 表示成员信息