Handle the link event.

本文介绍如何在 SharePoint 2010 中处理链接的 'onclick' 事件,特别是当文件为 InfoPath 表单时,如何调整设置使链接通过 IE 打开文件。

A lot of link in SharePoint 2010 is handle to  “onclick” event,

This is the default link:

<a onfocus="OnLink(this)" href="{$thisNode/@FileRef}" onmousedown="return VerifyHref(this,event,'{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@serverurl.progid}')"

                 onclick="return DispEx(this,event,'TRUE','FALSE','{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@HTML_x0020_File_x0020_Type}','{$thisNode/@serverurl.progid}','{$thisNode/@CheckoutUser.id}','{$Userid}','{$XmlDefinition/List/@ForceCheckout}','{$thisNode/@IsCheckedoutToLocal}','{$thisNode/@PermMask}')">

<a>

You click the a link the “onclick” event will be first handled, when you file is InfoPath form, you want your link open the file by IE,

So you need update the “onclick” event

form  '{$thisNode/@File_x0020_Type.url}'

 to ‘http://[SharePointServer]/Docs/_layouts/FormServer.aspx?XmlLocation=[XmlUrl]  &DefaultItemOpen=1’

&DefaultItemOpen=1 is tell the page open by IE.

my url is:

‘http://sharepoint-test/Docs/_layouts/FormServer.aspx?XmlLocation=/Docs/IHS%20Experse%20Report/July-28th-2010%20by%20leon-11.xml&DefaultItemOpen=1’

帮助我讲解代码:package com.tplink.omada.sdncontroller.base import android.app.Application import androidx.annotation.ColorRes import androidx.annotation.StringRes import androidx.databinding.Observable import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.tplink.omada.OmadaApplication import com.tplink.omada.R import com.tplink.omada.common.Event import com.tplink.omada.common.utils.safeLaunch import com.tplink.omada.controller.session.ControllerSessionManager import com.tplink.omada.controller.viewmodel.BaseViewModel import com.tplink.omada.libnetwork.controller.model.Results import com.tplink.omada.libnetwork.controller.model.SdnErrorCode import com.tplink.omada.libnetwork.controller.protocol.GeneralResponse import com.tplink.omada.libnetwork.controller.protocol.OltInnerResponse import com.tplink.omada.libnetwork.sdncontroller.model.ClientInfo import com.tplink.omada.libnetwork.sdncontroller.model.Device import com.tplink.omada.libnetwork.sdncontroller.model.DeviceType import com.tplink.omada.libnetwork.sdncontroller.model.EnumLanguageCode import com.tplink.omada.libnetwork.sdncontroller.model.LanguageType import com.tplink.omada.libnetwork.sdncontroller.model.OpenApiBatchResult import com.tplink.omada.libutility.log.Log import com.tplink.omada.sdncontroller.ExceptionHandle import com.tplink.omada.sdncontroller.SdnErrMsg import com.tplink.omada.sdncontroller.repository.ClientRepository import com.tplink.omada.sdncontroller.repository.DeviceRepository import com.tplink.omada.sdncontroller.repository.MspDeviceRepository import com.tplink.omada.sdncontroller.repository.OltRepository import com.tplink.omada.sdncontroller.ui.loading.LaunchState import com.tplink.omada.sdncontroller.ui.monitor.SdnDeviceStatus import com.tplink.omada.sdncontroller.viewmodel.mspv2.EnumQueryParameter import com.tplink.omada.sdncontroller.viewmodel.mspv2.SdnDeviceListBaseViewModel import com.tplink.omada.sdncontroller.viewmodel.settings.site.SdnControllerSiteViewModel import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.coroutineScope import java.util.Locale /** * Created by Wan Chengwenjie on 2020/1/12. */ open class SdnBaseViewModel(application: Application) : BaseViewModel(application) { val uiEvent: UIChange by lazy { UIChange() } private lateinit var repository: ClientRepository private lateinit var mspDeviceRepo: MspDeviceRepository private var clientResult: ClientInfo? = null private val callbacks = mutableListOf<Pair<Observable, Observable.OnPropertyChangedCallback>>() // controller是否支持分页获取, var supportGetDeviceByPage = false protected fun <T: Observable> T.addAutoRemoveCallback(callback: (Observable?) -> Unit) { val wrappedCallback = object : Observable.OnPropertyChangedCallback() { override fun onPropertyChanged(sender: Observable?, propertyId: Int) { callback(sender) } } addOnPropertyChangedCallback(wrappedCallback) callbacks.add(this to wrappedCallback) } override fun onCleared() {0 try { callbacks.forEach { (observable, callback) -> observable.removeOnPropertyChangedCallback(callback) } callbacks.clear() } catch (e: Exception) { Log.e("SdnBaseViewModel", e.message) } super.onCleared() } /** * 过滤请求结果,其他全抛异常, 不显示loading * @param block 请求体 * @param success 成功回调 * @param error 失败回调 */ fun <T> launchBackground( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: (T) -> Unit, error: (SdnErrMsg) -> Unit = { uiEvent.showDialog.postValue(Event(it)) }) { launchOnlyResult(block, success, error, {}, false) } fun <T> launchBackground( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: (T) -> Unit, error: (SdnErrMsg) -> Unit = { uiEvent.showDialog.postValue(Event(it)) }, ignoreLaunchState: Boolean = false) { launchOnlyResult(block, success, error, {}, false, ignoreLaunchState = ignoreLaunchState) } fun <T> launchManualLoading( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: (T) -> Unit, error: (SdnErrMsg) -> Unit = { uiEvent.showDialog.postValue(Event(it)) }, complete: () -> Unit = {}) { viewModelScope.safeLaunch({ handleException( { block() }, { res -> executeResponse(res) { @Suppress("UNCHECKED_CAST") success(it ?: (Unit as T)) } }, { error(it) }, { complete() } ) }, { error(detachError(it)) }) } fun <T> launchOnlyResult( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: (T) -> Unit, error: (SdnErrMsg) -> Unit = { uiEvent.showDialog.postValue(Event(it)) }, complete: () -> Unit = {}, isShowDialog: Boolean = true ) { launchOnlyResult(block, success, error, complete, isShowDialog, false) } /** * 过滤请求结果,其他全抛异常 * @param block 请求体 * @param success 成功回调 * @param error 失败回调 * @param complete 完成回调(无论成功失败都会调用) * @param isShowDialog 是否显示加载框 */ fun <T> launchOnlyResult( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: (T) -> Unit, error: (SdnErrMsg) -> Unit = { uiEvent.showDialog.postValue(Event(it)) }, complete: () -> Unit = {}, isShowDialog: Boolean = true, ignoreLaunchState: Boolean = false ) { if(!ignoreLaunchState && OmadaApplication.getInstance().controllerSessionManager.controllerLaunchManager.controllerLaunchStateFlow.value == LaunchState.Launching) return if (isShowDialog) uiEvent.loading.postValue(Event(true)) viewModelScope.safeLaunch({ handleException( { block() }, { res -> executeResponse(res) { @Suppress("UNCHECKED_CAST") success(it ?: (Unit as T)) } }, { error(it) }, { uiEvent.loading.postValue(Event(false)) complete() } ) }, { uiEvent.loading.postValue(Event(false)) error(detachError(it)) }) } /** * 过滤请求结果,其他全抛异常 * @param block 请求体 * @param success 成功回调 * @param error 失败回调 * @param complete 完成回调(无论成功失败都会调用) * @param isShowDialog 是否显示加载框 */ fun <T> launchOnlyResultExt( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: (T) -> Unit, error: (SdnErrMsg) -> Unit = { uiEvent.showDialog.postValue(Event(it)) }, complete: () -> Unit = {}, isShowDialog: Boolean = true ) { if (isShowDialog) uiEvent.loadingExt.postValue(Event(true)) viewModelScope.safeLaunch({ handleException( { block() }, { res -> executeResponse(res) { @Suppress("UNCHECKED_CAST") success(it ?: (Unit as T)) } }, { error(it) }, { if (isShowDialog) { uiEvent.loadingExt.postValue(Event(false)) } complete() } ) }, { if (isShowDialog) { uiEvent.loadingExt.postValue(Event(false)) } error(detachError(it)) }) } /** * 上一个接口如果返回的Data在某种情况下为空的 */ fun <T> launchAnyResult( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: (T?) -> Unit, error: (SdnErrMsg) -> Unit = { uiEvent.showDialog.postValue(Event(it)) }, complete: () -> Unit = {}, isShowDialog: Boolean = true ) { if (isShowDialog) uiEvent.loading.postValue(Event(true)) viewModelScope.safeLaunch({ handleException( { block() }, { res -> executeResponse(res) { @Suppress("UNCHECKED_CAST") success(it) } }, { error(it) }, { uiEvent.loading.postValue(Event(false)) complete() } ) }, { uiEvent.loading.postValue(Event(false)) error(detachError(it)) }) } /** * 请求结果过滤 */ protected suspend fun <T> executeResponse( response: GeneralResponse<T>, success: suspend CoroutineScope.(T) -> Unit ) { coroutineScope { if (response.isSuccess) { success(response.result) } else { if(response.rawErrorCode == SdnErrorCode.TRANSPARENT_ERROR_CODE.code){ // 转换为InnerResponse val OLTInnerResponse = response.result as OltInnerResponse throw SdnErrMsg.fromErrorCode(SdnErrorCode.fromCode(response.rawErrorCode, OLTInnerResponse.errcode), getApp()) } if (response.rawErrorCode == SdnErrorCode.BATCH_OPENAPI_ERROR_CODE.code) { val batchOpenApiResponse = response.result as? OpenApiBatchResult batchOpenApiResponse?.response?.find { it.errorCode != SdnErrorCode.OK.code }?.let { itemResponse -> throw SdnErrMsg.fromErrorCode(SdnErrorCode.fromCode(itemResponse.errorCode ?: SdnErrorCode.UNKNOWN.code), getApp()) } } throw SdnErrMsg.fromErrorCode(SdnErrorCode.fromCode(response.rawErrorCode), getApp()) } } } /** * 请求并验证接口返回数据 * * 通过[GeneralResponse.getRawErrorCode]判断接口请求结果,并回调对应结果,同时也支持自动抛出错误,弹出对应的错误提示 * * @param repoApi 接口 * @param showDialog 是否需要显示错误码对应的弹窗 * @param success 成功的数据回调 * @param throwable 异常回调 */ protected suspend fun <T> verifyResponse( repoApi: suspend () -> GeneralResponse<T>, showDialog: Boolean = true, success: (T) -> Unit = {}, throwable: (SdnErrMsg) -> Unit = {} ) { runCatching { executeResponse(repoApi()) { success.invoke(it) } }.onFailure { val error = detachError(it) throwable.invoke(error) if (showDialog) { uiEvent.showDialog.postValue(Event(error)) } } } /** * 请求并验证接口返回数据 * * 在接口验证成功后,通过LiveData回调数据 * * @param repoApi 接口 * @param liveData 成功的数据通过此[MutableLiveData.postValue]回调,可不传 */ protected suspend fun <T, LD : MutableLiveData<T>> verifyResponseAndPost(repoApi: suspend () -> GeneralResponse<T>, liveData: LD? = null) { verifyResponse(repoApi, success = { liveData?.postValue(it) }) } /** * 异常统一处理 */ private suspend fun <T> handleException( block: suspend CoroutineScope.() -> GeneralResponse<T>, success: suspend CoroutineScope.(GeneralResponse<T>) -> Unit, error: suspend CoroutineScope.(SdnErrMsg) -> Unit, complete: suspend CoroutineScope.() -> Unit ) { coroutineScope { try { success(block()) } catch (e: Throwable) { Log.e("Launch Exception", e.toString()) e.printStackTrace() error(detachError(e)) } finally { complete() } } } fun detachError(e: Throwable): SdnErrMsg { return if (e is SdnErrMsg) { e } else { SdnErrMsg.fromErrorCode(ExceptionHandle.handleException(e), getApp()) } } override fun handleError(results: Results<*>) { } fun handleSdnControllerError(errMsg: SdnErrMsg) { uiEvent.showDialog.postValue(Event(errMsg)) } /** * UI事件 * 使用以下三个默认Event来处理公共的事件。 */ inner class UIChange { val showDialog by lazy { MutableLiveData<Event<SdnErrMsg>>() } val loading by lazy { MutableLiveData<Event<Boolean>>() } val loadingExt by lazy { MutableLiveData<Event<Boolean>>() } val toastEvent by lazy { MutableLiveData<Event<String>>() } val autoDismissDialog by lazy {MutableLiveData<Event<String>>()} val showCustomDialog by lazy { MutableLiveData<Event<String>>() } } fun getApp(): Application { return OmadaApplication.getInstance() } fun getString(@StringRes id: Int): String { return OmadaApplication.getInstance().resources.getString(id) } fun getString(@StringRes id: Int, str: String): String { return OmadaApplication.getInstance().resources.getString(id, str) } fun getString(@StringRes id: Int, str1: String, str2: String): String { return OmadaApplication.getInstance().resources.getString(id, str1, str2) } fun getString(@StringRes id: Int, num: Int): String { return OmadaApplication.getInstance().resources.getString(id, num) } fun getString(@StringRes id: Int, num: Int, num1: Int): String { return OmadaApplication.getInstance().resources.getString(id, num, num1) } fun getColor(@ColorRes color: Int): Int { return OmadaApplication.getInstance().resources.getColor(color) } /** * @Method * @Description 点击设备列表 * @Date: 2021/4/16 16:53 * @Author: hxw * @Param * @Return */ fun onDeviceClick(manager: ControllerSessionManager, type: String, mac: String, successBlock: () -> Unit) { // 如果没有devices权限,直接提示no permission if (manager.getCurrentSdnSession()?.isMspRoleSiteDeviceManageBlock() == true) { uiEvent.toastEvent.postValue(Event(getString(R.string.role_no_permission))) } else { uiEvent.loadingExt.postValue(Event(true)) // 支持分页获取后直接请求 if (supportGetDeviceByPage) { searchDeviceByMac(manager, mac, { it?.let { checkDeviceStatus(manager, it, successBlock) } }, { showErrorMsg(type) }) } else { // device 组件协商 getDeviceFromCache(manager, mac, { checkDeviceStatus(manager, it, successBlock) }, { // cache 设备列表未找到设备,暂不做处理 showErrorMsg(type) }) } } } private fun showErrorMsg(deviceType: String) { uiEvent.loadingExt.postValue(Event(false)) when (DeviceType.fromString(deviceType)) { DeviceType.AP -> { uiEvent.toastEvent.postValue(Event(getString(R.string.sdn_server_error_ap_does_not_exist))) } DeviceType.GATEWAY -> { uiEvent.toastEvent.postValue(Event(getString(R.string.sdn_server_error_gateway_does_not_exist))) } DeviceType.SWITCH -> { uiEvent.toastEvent.postValue(Event(getString(R.string.sdn_server_error_switch_does_not_exist))) } DeviceType.OLT -> { uiEvent.toastEvent.postValue(Event(getString(R.string.olt_does_not_exist))) } else -> { uiEvent.toastEvent.postValue(Event(getString(R.string.sdn_server_error_device_not_exist))) } } } /** * 根据mac请求设备信息 */ private fun searchDeviceByMac(manager: ControllerSessionManager, mac: String, successBlock: (Device?) -> Unit, errorBlock: () -> Unit) { mspDeviceRepo = manager.createSdnRepository(MspDeviceRepository::class.java) val map = mapOf<String, String>( EnumQueryParameter.PAGE.value to "1", EnumQueryParameter.PAGE_SIZE.value to SdnDeviceListBaseViewModel.PAGE_SIZE.toString(), EnumQueryParameter.SEARCH_KEY.value to mac ) launchOnlyResult({ mspDeviceRepo.getDevice(map) }, { it.data?.find { device -> device.mac == mac }?.let { result -> successBlock(result) } ?: errorBlock.invoke() }, { errorBlock.invoke() }, { }, false) } /** * @Method * @Description 获取缓存中设备列表 * @Date: 2021/4/16 16:32 * @Author: hxw * @Param * @Return */ fun getDeviceFromCache(manager: ControllerSessionManager, mac: String, successBlock: (Device) -> Unit, errorBlock: () -> Unit) { val device = manager.getCurrentSdnSession()!!.getDeviceFromList(mac) if (device != null) { successBlock.invoke(device) } else { launchBackground({ val repository: DeviceRepository = manager.createSdnRepository(DeviceRepository::class.java) repository.getDevice() }, { val device = it.find { it.mac == mac } if (device != null) { successBlock.invoke(device) } else { errorBlock.invoke() } manager.getCurrentSdnSession()?.setDeviceList(it) }, { errorBlock.invoke() }) } } /** * @Method * @Description 检查设备的当前状态 * @Date: 2021/4/16 16:33 * @Author: hxw * @Param * @Return */ fun checkDeviceStatus(manager: ControllerSessionManager, device: Device, successBlock: () -> Unit) { if (device.active == false) { makeComponentsAndGotoDeviceDetail(manager, device.type, device.mac, successBlock) return } when (SdnDeviceStatus.fromCode(device.status)) { SdnDeviceStatus.PENDING, SdnDeviceStatus.PENDING_WIRELESS -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_pending))) } SdnDeviceStatus.MANAGED_BY_OTHERS, SdnDeviceStatus.MANAGED_BY_OTHERS_WIRELESS -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_manage_by_other))) } SdnDeviceStatus.ADOPT_FAILED, SdnDeviceStatus.ADOPT_FAILED_WIRELESS -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_adopt_failed))) } SdnDeviceStatus.ADOPTING, SdnDeviceStatus.ADOPTING_WIRELESS -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_adopting))) } SdnDeviceStatus.PROVISIONING -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_provisioning))) } SdnDeviceStatus.CONFIGURING -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_configuring))) } SdnDeviceStatus.UPGRADING -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_upgrading))) } SdnDeviceStatus.REBOOTING -> { uiEvent.loadingExt.postValue(Event(false)) uiEvent.toastEvent.postValue(Event(getString(R.string.device_error_rebooting))) } SdnDeviceStatus.DISCONNECTED, SdnDeviceStatus.DISCONNECTED_MIGRATING, SdnDeviceStatus.HEARTBEAT_MISSED, SdnDeviceStatus.HEARTBEAT_MISSED_MIGRATING, SdnDeviceStatus.HEARTBEAT_MISSED_WIRELESS, SdnDeviceStatus.HEARTBEAT_MISSED_WIRELESS_MIGRATING, SdnDeviceStatus.ISOLATED, SdnDeviceStatus.ISOLATED_MIGRATING, SdnDeviceStatus.CONNECTED, SdnDeviceStatus.CONNECTED_MIGRATING, SdnDeviceStatus.CONNECTED_WIRELESS, SdnDeviceStatus.CONNECTED_WIRELESS_MIGRATING -> { makeComponentsAndGotoDeviceDetail(manager, device.type, device.mac, successBlock) } else -> { uiEvent.loadingExt.postValue(Event(false)) // do nothing } } } /** * @Method * @Description 组件协商并且跳转设备详情 * @Date: 2021/4/16 16:23 * @Author: hxw * @Param * @Return */ fun makeComponentsAndGotoDeviceDetail(manager: ControllerSessionManager, type: String, mac: String, successBlock: () -> Unit) { if (manager.getCurrentSdnSession()!!.getDeviceComponents(mac) != null) { successBlock() uiEvent.loadingExt.postValue(Event(false)) } else { val repository: DeviceRepository = manager.createSdnRepository(DeviceRepository::class.java) val oltRepo: OltRepository by lazy { manager.createSdnV5Repository(OltRepository::class.java) } when (type) { "ap" -> { launchOnlyResult({ repository.getApComponente(mac) }, { manager.getCurrentSdnSession()?.apply { setDeviceComponents(mac, it) } successBlock() }, { }, { uiEvent.loadingExt.postValue(Event(false)) }, false) } "switch" -> { launchOnlyResult({ repository.getSwitchComponente(mac) }, { manager.getCurrentSdnSession()?.apply { setDeviceComponents(mac, it) } successBlock() }, { }, { uiEvent.loadingExt.postValue(Event(false)) }, false) } "gateway" -> { launchOnlyResult({ repository.getGatewayComponente(mac) }, { manager.getCurrentSdnSession()?.apply { setDeviceComponents(mac, it) } successBlock() }, { }, { uiEvent.loadingExt.postValue(Event(false)) }, false) } "olt" -> { launchOnlyResult({ oltRepo.getOltComponent(mac) }, { manager.getCurrentSdnSession()?.apply { setDeviceComponents(mac, it) } successBlock() }, { }, { uiEvent.loadingExt.postValue(Event(false)) }, false) } else -> { successBlock() uiEvent.loadingExt.postValue(Event(false)) } } } } /** * @Method * @Description 点击client列表 * @Date: 2021/4/16 16:53 * @Author: hxw * @Param * @Return */ fun onClientClick(manager: ControllerSessionManager, mac: String, successBlock: (Boolean) -> Unit) { // device 组件协商 getClientByMac(manager, mac, { successBlock.invoke(it.wireless) }, { // cache client 列表未找到设备,暂不做处理 uiEvent.toastEvent.postValue(Event(getString(R.string.sdn_server_error_client_not_exist))) }) } /** * @Method * @Description 获取缓存中client列表 * @Date: 2021/4/16 16:32 * @Author: hxw * @Param * @Return */ private fun getClientByMac(manager: ControllerSessionManager, mac: String, successBlock: (ClientInfo) -> Unit, errorBlock: () -> Unit) { searchClientByMac(manager, mac) { if (clientResult != null) { successBlock.invoke(clientResult!!) } else { errorBlock.invoke() } } } private fun searchClientByMac(manager: ControllerSessionManager, mac: String, successBlock: () -> Unit): ClientInfo? { repository = manager.createSdnRepository(ClientRepository::class.java) clientResult = null val map = mapOf<String, String>("currentPage" to "1", "currentPageSize" to SdnControllerSiteViewModel.PAGE_SIZE.toString(), "searchKey" to mac, "searchField" to "clientMac", "filters.active" to "true") launchOnlyResult({ repository.getClient(map) }, { for (client in it.data) { if (mac == client.mac) { clientResult = client } } successBlock() }) return clientResult } fun getLanguageCode(): Int { // 简体与繁体返回语言码都是“zh” if (LanguageType.fromString(Locale.getDefault().language) == LanguageType.CHINESE) { val languageTag = Locale.getDefault().toLanguageTag() return if (languageTag == "zh-Hant-TW" || languageTag == "zh-Hant-HK" || languageTag == "zh-Hant-MO" || languageTag == "zh-TW" || languageTag == "zh-HK" || languageTag == "zh-MO" ) { EnumLanguageCode.LANGUAGE_CODE_CHINESE.code } else { EnumLanguageCode.LANGUAGE_CODE_ENGLISH.code } } return when (LanguageType.fromString(Locale.getDefault().language)) { LanguageType.ENGLISH -> EnumLanguageCode.LANGUAGE_CODE_ENGLISH.code LanguageType.GERMAN -> EnumLanguageCode.LANGUAGE_CODE_GERMAN.code LanguageType.FRENCH -> EnumLanguageCode.LANGUAGE_CODE_FRENCH.code LanguageType.SPANISH -> EnumLanguageCode.LANGUAGE_CODE_SPANISH.code LanguageType.ITALIAN -> EnumLanguageCode.LANGUAGE_CODE_ITALIAN.code LanguageType.PORTUGUESE -> EnumLanguageCode.LANGUAGE_CODE_PORTUGUESE.code LanguageType.RUSSIAN -> EnumLanguageCode.LANGUAGE_CODE_RUSSIAN.code LanguageType.TURKISH -> EnumLanguageCode.LANGUAGE_CODE_TURKISH.code LanguageType.JAPANESE -> EnumLanguageCode.LANGUAGE_CODE_JAPANESE.code LanguageType.KOREAN -> EnumLanguageCode.LANGUAGE_CODE_KOREAN.code LanguageType.CZECH -> EnumLanguageCode.LANGUAGE_CODE_CZECH.code LanguageType.DUTCH -> EnumLanguageCode.LANGUAGE_CODE_DUTCH.code LanguageType.POLISH -> EnumLanguageCode.LANGUAGE_CODE_POLISH.code LanguageType.SLOVAKIAN -> EnumLanguageCode.LANGUAGE_CODE_SLOVAKIAN.code LanguageType.HUNGARIAN -> EnumLanguageCode.LANGUAGE_CODE_HUNGARIAN.code LanguageType.BULGARIAN -> EnumLanguageCode.LANGUAGE_CODE_BULGARIAN.code LanguageType.ROMANIAN -> EnumLanguageCode.LANGUAGE_CODE_ROMANIAN.code LanguageType.UKRAINIAN -> EnumLanguageCode.LANGUAGE_CODE_UKRAINIAN.code LanguageType.SERBIAN -> EnumLanguageCode.LANGUAGE_CODE_SERBIAN.code LanguageType.ARABIC -> EnumLanguageCode.LANGUAGE_CODE_ARABIC.code else -> EnumLanguageCode.LANGUAGE_CODE_UNKNOWN.code } } fun updateExtLoadingStatus(status: Boolean) { uiEvent.loadingExt.postValue(Event(status)) } }
09-12
一下kingbase的sql语句能够适用于高斯数据库吗,如果不适用,请修改: CREATE TABLE "evo_event"."event_log_alarm202509" ( id bigint NOT NULL, device_code character varying(64 char) NOT NULL, device_name character varying(64 char), unit_type tinyint DEFAULT 0 NOT NULL, unit_seq tinyint DEFAULT 0, channel_seq integer DEFAULT 0 NOT NULL, channel_name character varying(64 char), alarm_stat smallint NOT NULL, alarm_type bigint NOT NULL, alarm_date timestamp without time zone NOT NULL, alarm_grade integer NOT NULL, handle_user character varying(50 char), handle_date timestamp without time zone, handle_message character varying(255 char), handle_stat integer, alarm_picture character varying(500 char), alarm_picture_size numeric, alarm_code character varying(50 char) NOT NULL, node_type tinyint, node_code character varying(64 char), memo character varying(64 char), org_code character varying(90 char), org_name character varying(50 char), device_category integer, alarm_position character varying(64 char) NOT NULL, link_names character varying(512 char), is_event tinyint DEFAULT 0 NOT NULL, sub_system character varying(50 char), insert_flag tinyint, extend character varying(2048 char) )PARTITION BY RANGE (alarm_date); CREATE TABLE evo_event.event_log_alarm202509_p20240101 PARTITION OF evo_event.event_log_alarm202509 FOR VALUES FROM ('2024-01-01') TO ('2024-01-02'); ALTER TABLE ONLY evo_event.event_log_alarm202509 ADD CONSTRAINT event_log_alarm202509_primary_id PRIMARY KEY (id, alarm_date); CREATE INDEX idx_alarm_code202510 ON ONLY evo_event.event_log_alarm202509 USING btree (ALARM_CODE); CREATE INDEX idx_time_org202510 ON ONLY evo_event.event_log_alarm202509 USING btree (ALARM_DATE, ORG_CODE); CREATE INDEX idx_type_org202510 ON ONLY evo_event.event_log_alarm202509 USING btree (ALARM_TYPE, ORG_CODE); CREATE INDEX idx_log_alarm_position202510 ON ONLY evo_event.event_log_alarm202509 USING btree (ALARM_POSITION); CREATE INDEX idx_log_alarm_handle_user202510 ON ONLY evo_event.event_log_alarm202509 USING btree (HANDLE_USER); CREATE INDEX idx_log_alarm_handle_date202510 ON ONLY evo_event.event_log_alarm202509 USING btree (HANDLE_DATE); CREATE INDEX idx_log_alarm_handle_stat202510 ON ONLY evo_event.event_log_alarm202509 USING btree (HANDLE_STAT); ALTER TABLE ONLY evo_event.event_log_alarm202509 ALTER COLUMN id SET DEFAULT nextval('evo_event.event_log_alarm_id_seq'::regclass);
09-13
"E:\渔家乐\新建文件夹\IntelliJ IDEA Community Edition 2024.3.4\jbr\bin\java.exe" "-javaagent:E:\渔家乐\新建文件夹\IntelliJ IDEA Community Edition 2024.3.4\lib\idea_rt.jar=50239" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath E:\渔家乐\文件\linkid\out\production\linkid;E:\渔家乐\文件\linkid\lib\druid-1.1.21.jar;E:\渔家乐\文件\linkid\lib\javafx-base-11.0.2.jar;E:\渔家乐\文件\linkid\lib\javafx-fxml-11.0.2.jar;E:\渔家乐\文件\linkid\lib\commons-dbutils-1.7.jar;E:\渔家乐\文件\linkid\lib\javafx-base-11.0.2-win.jar;E:\渔家乐\文件\linkid\lib\javafx-controls-11.0.2.jar;E:\渔家乐\文件\linkid\lib\javafx-fxml-11.0.2-win.jar;E:\渔家乐\文件\linkid\lib\javafx-graphics-11.0.2.jar;E:\渔家乐\文件\linkid\lib\javafx-controls-11.0.2-win.jar;E:\渔家乐\文件\linkid\lib\javafx-graphics-11.0.2-win.jar;E:\渔家乐\文件\linkid\lib\mysql-connector-java-8.0.23.jar com.itheima.MainApp Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787) at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Node.fireEvent(Node.java:8879) at javafx.scene.control.Button.fire(Button.java:200) at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206) at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3851) at javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579) at javafx.scene.Scene.processMouseEvent(Scene.java:1849) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433) at com.sun.glass.ui.View.handleMouseEvent(View.java:556) at com.sun.glass.ui.View.notifyMouse(View.java:942) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273) at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83) at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1782) ... 47 more Caused by: java.lang.RuntimeException: javafx.fxml.LoadException: /E:/%e6%b8%94%e5%ae%b6%e4%b9%90/%e6%96%87%e4%bb%b6/linkid/out/production/linkid/com/itheima/view/login.fxml:10 at com.itheima.utils.PaneUtils.showAndInitPane(PaneUtils.java:49) at com.itheima.controller.RegisterController.toLoginPage(RegisterController.java:44) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ... 54 more Caused by: javafx.fxml.LoadException: /E:/%e6%b8%94%e5%ae%b6%e4%b9%90/%e6%96%87%e4%bb%b6/linkid/out/production/linkid/com/itheima/view/login.fxml:10 at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625) at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:105) at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:941) at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:980) at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:227) at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:752) at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435) at com.itheima.utils.PaneUtils.showAndInitPane(PaneUtils.java:39) ... 56 more Caused by: java.lang.InstantiationException at java.base/jdk.internal.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128) at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:304) at java.base/java.lang.Class.newInstance(Class.java:725) at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:936) ... 64 more 进程已结束,退出代码为 0
06-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值